談?wù)?mScrollX


屬性的意義


/**

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

* horizontally.

* {@hide}

*/

@ViewDebug.ExportedProperty(category="scrolling")

protected intmScrollX;

手機的展示區(qū)域是有限的。當所需展示內(nèi)容過寬時,有一部分就會被隱藏。

而 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 像素,背景紫色,繪制的內(nèi)容是居中的紅色小圓。


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

滾動的只是內(nèi)容,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);

}

當繪制背景時,有意的調(diào)整了 canvas 的原點。

這說明在繪制背景前 canvas 的原點已經(jīng)發(fā)生了改變。

具體源碼尚未找到。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容