View 的學習筆記一

1、view 的事件分發機制理解三個概念:dispatchKeyEvent、onTouchEvent與onInterceptTouchEvent
     用僞代碼總結爲:
dispatchkeyevent(event) {
if(onInteceptTouchEvent(event)) {
      return onTouchEvent(event);
} else {
      return childview.dispatchkeyEvent(event)
}
}

2、view的onTouch比onTouchEvent方法優先級高,如果view有設置ontouchListener則執行onTouch方法
3、Scroller類的理解
scroller類實際在view的滑動過程中並沒有實際去操作view的滑動,它本身擔當的角色是一個指導員的角色,引導view去進行怎樣的滑動,實際的滑動是調用了view 的scrollto或者scrollby的方法,scrollto是指滑動到一個座標點,scrollby是指滑動了多少距離到達某一個點,需要注意的是這裏移動的都是view的內容,並沒有移動view本身的位置;

public void scrollTo(int x, int y) {
           if (mScrollX != x || mScrollY != y) {
               int oldX = mScrollX;
               int oldY = mScrollY;
                mScrollX = x;
               mScrollY = y;
               onScrollChanged(mScrollX, mScrollY, oldX, oldY);
               invalidate();
            }
       }
public void scrollBy(int x, int y) {
           scrollTo(mScrollX + x, mScrollY + y);
        }

從源碼可以看出scrollBy最終也是調用了scrollto的方法,對同一個view調用兩次scrollTo(10,10)只會移動一次,而調用兩次scrollBy(10,10)會移動兩次,實際x方向移動的距離爲20.y方向也爲20
通常Android上應用一些炫酷的拖動的界面都是繼承重寫了viewgroup的一些方法,view 的computescroll方法會在父容器重繪時調用到(viewgroup的重繪必定會引起外層父容器的重繪,而父容器的重繪會在drawchild()方法中調用到child.computeScroll()).

4、view類中的mScrollX與mScrollY:scrollx、scrolly分別爲屏幕左邊緣在整個view的座標點的x、y座標,view的原點爲界面初始化時與屏幕左邊緣重疊時的點








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章