美文网首页
谈谈 mScrollX

谈谈 mScrollX

作者: ivolianer | 来源:发表于2016-04-14 14:02 被阅读426次


    属性的意义

    /**

    * The offset, in pixels, by which the content of this view is scrolled

    * horizontally.

    * {@hide}

    */

    @ViewDebug.ExportedProperty(category="scrolling")

    protected intmScrollX;

    手机的展示区域是有限的。当所需展示内容过宽时,有一部分就会被隐藏。

    而 mScrollX 就是用来表示被隐藏部分的宽度。

    直观的例子1

    这是 4 个高宽皆为 300 像素的正方形,并排放置在一个线性布局中。

    宽度仅有 1080 像素的手机无法完整地展示整个布局,黄色正方形的一部分超出了屏幕。

    findViewById(R.id.view).scrollTo(300,0);

    使用 scrollTo 改变 mScrollX 为 300。

    理解方式一,线性布局滚动了 300 像素。

    理解方式二,线性布局被隐藏的部分是 300 像素。

    直观的例子2

    Paint paint= new Paint();

    @Override

    protected void onDraw(Canvas canvas) {

    paint.setAntiAlias(true);

    paint.setColor(Color.RED);

    canvas.drawCircle(150,150,100,paint);

    }

    View 高宽皆为 300 像素,背景紫色,绘制的内容是居中的红色小圆。

    findViewById(R.id.custom).scrollTo(150,0);

    滚动的只是内容,mScrollX 对背景没有影响。

    原理的揣测

    final intscrollX =mScrollX;

    final intscrollY =mScrollY;

    if((scrollX | scrollY) ==0) {

    background.draw(canvas);

    }else{

    canvas.translate(scrollX,scrollY);

    background.draw(canvas);

    canvas.translate(-scrollX,-scrollY);

    }

    当绘制背景时,有意的调整了 canvas 的原点。

    这说明在绘制背景前 canvas 的原点已经发生了改变。

    具体源码尚未找到。

    相关文章

      网友评论

          本文标题:谈谈 mScrollX

          本文链接:https://www.haomeiwen.com/subject/tbpglttx.html