標籤:
View的界限
View就是我們看到的介面,有四個界限範圍分別是, Top/Left, Bottom/Right,座標系從左上到右下。這四個值可以通過任何View的子類調用getTop()/get...得到。
但是坑爹的是這些不能在生命週期函數裡調用,否則都返回0,因為繪製還沒完成呢,可以放在button的onclicklistener中。
事件的種類
分為MotionEvent和TouchSlop,分為ACTION_DOWN, ACTION_MOVE, ACTION_UP。
MotionEvent是點擊之後的event可以通過getX()/getY()/getRawX()/getRawY()來得到點擊的位置,區別是一個是相對當前View的,一個是相對手機螢幕左上方的。
TouchSlop是系統能識別出的最小滑動距離。可以通過
VelocityTracker用開跟蹤划動過程中的速度
GestureDetector用來檢測使用者的單擊、滑動、長按、雙擊行為。
Scroller用來彈性滑動對象。
划動的方式
划動的方式主要有3中,分別是通過View本身提供的scrollTo/scrollBy方法。第二種是通過動畫給View施加平移效果。第三種是通過改變view的LayoutParams使得View重新布局從而實現滑動。
第一種,scrollTo/scrollBy只是改變View的內容而不是View本身的位置,View本身的位置是不變的(getScrollX是改變的,但是getTop/getLeft/getBottom/getRight不變)。
有點是操作簡單,適合對View的內容進行滑動。
第二種是動畫,優點是操作簡單,適用於沒有互動的view和實現複雜的動畫效果。
第三種是改變布局參數,優點是適用於有互動的View,缺點是操作稍微複雜。
事件分發機制
點擊事件的分發就是對MotionEvent事件的分發過程,由三個主要的方法共同完成:dispatchTouchEvent(), onInterceptTouchEvent(), onTouchEvent()
只要點擊事件傳遞到了當前view,dispatchTouchEvent方法一定會被調用他們之間的關係可以用表示:
@Override public boolean dispatchTouchEvent(MotionEvent event) { boolean consume = false; if (onInterceptTouchEvent(event)){ consume = onTouchEvent(event); } else { consume = child.dispatchTouchEvent(event); } return consume; }
對於ViewLayout來說,處理的順序是:
MainActivity-dispatchTouchEvent-ACTION_DOWN
CustomLayout-dispatchTouchEvent-ACTION_DOWN
CustomLayout-onInterceptTouchEvent-ACTION_DOWN
CustomButton-dispatchTouchEvent-ACTION_DOWN
CustomButton-onTouch-ACTION_DOWN
CustomButton-onTouchEvent-ACTION_DOWN
MainActivity-dispatchTouchEvent-ACTION_UP
CustomLayout-dispatchTouchEvent-ACTION_UP
CustomLayout-onInterceptTouchEvent-ACTION_UP
CustomButton-dispatchTouchEvent-ACTION_UP
CustomButton-onTouch-ACTION_UP
CustomButton-onTouchEvent-ACTION_UP
CustomButton--onClick
對View來說,處理的順序是:
MainActivity-dispatchTouchEvent-ACTION_DOWN
CustomButton-dispatchTouchEvent-ACTION_DOWN
CustomButton-onTouch-ACTION_DOWN
CustomButton-onTouchEvent-ACTION_DOWN
MainActivity-dispatchTouchEvent-ACTION_UP
CustomButton-dispatchTouchEvent-ACTION_UP
CustomButton-onTouch-ACTION_UP
CustomButton-onTouchEvent-ACTION_UP
CustomButton--onClick
詳情請參考:http://blog.csdn.net/lanhuzi9999/article/details/26515421
Android中View的基礎知識