掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
首先祝大家國(guó)慶節(jié)快樂(lè),玩的開(kāi)心;

說(shuō)到Android坐標(biāo)系其實(shí)就是一個(gè)三維坐標(biāo),Z軸向上,X軸向右,Y軸向下。這三維坐標(biāo)的點(diǎn)處理就能構(gòu)成Android豐富的界面或者動(dòng)畫等效果;
①獲取屏幕區(qū)域的寬高等尺寸獲取
- DisplayMetrics metrics = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(metrics);
- int widthPixels = metrics.widthPixels;
- int heightPixels = metrics.heightPixels;
②應(yīng)用程序App區(qū)域?qū)捀叩瘸叽绔@取
- Rect rect = new Rect();
- getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
③獲取狀態(tài)欄高度
- Rect rect= new Rect();
- getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
- int statusBarHeight = rectangle.top;
④View布局區(qū)域?qū)捀叩瘸叽绔@取
- Rect rect = new Rect();
- getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(rect);
View的靜態(tài)坐標(biāo)方法
View的滑動(dòng)方法
關(guān)于Android View的scrollBy()和scrollTo()參數(shù)傳遞正數(shù)卻向坐標(biāo)系負(fù)方向移動(dòng)的特性可能很多人都有疑惑,甚至是死記結(jié)論,這里我們簡(jiǎn)單給出產(chǎn)生這種特性的真實(shí)原因—-源碼分析,如下:
- public void scrollTo(int x, int y) {
- if (mScrollX != x || mScrollY != y) {
- int oldX = mScrollX;
- int oldY = mScrollY;
- mScrollX = x;
- mScrollY = y;
- invalidateParentCaches();
- onScrollChanged(mScrollX, mScrollY, oldX, oldY);
- if (!awakenScrollBars()) {
- postInvalidateOnAnimation();
- }
- }
- }
View的該方法注釋里明確說(shuō)明了調(diào)運(yùn)他會(huì)觸發(fā)onScrollChanged()和invalidated()方法,那我們就將矛頭轉(zhuǎn)向invalidated()方法觸發(fā)的draw()過(guò)程,draw()過(guò)程中最終其實(shí)會(huì)觸發(fā)下面的invalidate()方法,如下:
- public void invalidate(int l, int t, int r, int b) {
- final int scrollX = mScrollX;
- final int scrollY = mScrollY;
- //scroller時(shí)為何參數(shù)和坐標(biāo)反向的真實(shí)原因
- invalidateInternal(l - scrollX, t - scrollY, r - scrollX, b - scrollY, true, false);
- }
核心就在這里
scrollTo()和scrollBy()方法特別注意:如果你給一個(gè)ViewGroup調(diào)用scrollTo()方法滾動(dòng)的是ViewGroup里面的內(nèi)容,如果想滾動(dòng)一個(gè)ViewGroup則再給他嵌套一個(gè)外層,滾動(dòng)外層即可

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流