- View 基礎
- View的位置參數(shù)
- View的位置主要由四個頂點決定,四個屬性:top left right buttom 。這些坐標都是相對坐標,相對于父容器。left = getLeft()。
- 從3.0開始,增加了幾個參數(shù)。x y translationX translationY。x = left + translationX。當view向右移動時,left不變,translationX變大,x隨之變大。
- MotionEvent 和 TouchSlop
- 按下 : ACTION_DOWN 移動 : ACTION_MOVE 松開 : ACTION_UP
- 通過 MotionEvent 對象獲取事件發(fā)生的 x y 坐標。 getX() getY() 獲取的是相對于當前View的坐標, getRawX() getRawY() 獲取相對于左上角的 x y 坐標。
- TouchSlop 是系統(tǒng)能夠識別出的滑動的最小距離。ViewConfiguration.get(getContext()).getScaledTouchSlop()。
- VelocityTracker GestureDetector Scroller
- 使用 VelocityTracker 需要注意的是當不需要的時候,需要調用 clear 方法重置并回收內存。
- 為了輔助檢測用戶的 單擊 滑動 長按 雙擊 等行為,可以是用 GestureDetector。首先創(chuàng)建一個 GestureDetector 對象并實現(xiàn) OnGestureListener 接口。然后接管目標
View 的onTouchEvent 方法。最后就可以有選擇的實現(xiàn) OnGestureListener 和 OnDoubleTabListener 中的方法了。 - scrollTo/scrollBy 方法進行滑動時,其過程是瞬間完成的。此時可以使用 Scroller 滑動效果。
- View 滑動
- 三種方法:1. 通過 View 本身提供的 scrollTo/scrollBy 方法 2. 動畫 3. 改變 View 的 LayoutParams。
- View 動畫是對 View 的影像進行操作,并不會改變 View 的未知參數(shù)和寬高。
- 改變 LayoutParams 通過改變 View 的 marginLeft 屬性。
- 比較:1. scrollTo/scrollBy 只能滑動 View 中的內容部分,而不能滑動 View 的位置。 2. 動畫適用于不需要交互的 View 3. LayoutParams 適用于需要交互的 View。
- 彈性滑動
- 彈性滑動的共同思想都是將大滑動分成若干次小的滑動,并在一個時間段內完成。具體可以通過Scroller、Handler&postDelayer以及Thread&sleep等。
- 使用Scroller:原理:首先調用Scroller.startScroll()方法,然后調用invalidate()方法重繪,onDraw()方法中會調用computeScroll()方法,在該方法中獲取當前的scrollX和scrollY,然后調用scrollTo()實現(xiàn)滑動,然后再次重繪。
- 動畫:動畫沒什么好說的,屬性動畫
- Handler&postDelay:通過延時發(fā)送消息,在消息中進行View滑動,接連不斷的發(fā)送消息,實現(xiàn)彈性滑動。
- View的事件分發(fā)機制
- 當一個MotionEvent產(chǎn)生以后,系統(tǒng)需要把這些事件傳遞給一個具體的View,這個傳遞的過程就是分發(fā)過程。
分發(fā)過程由三個方法完成:dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent。 - dispatchTouchEvent:用來進行事件分發(fā),如果事件能夠傳遞到當前View,則一定會調用到這個方法。返回值受當前View的onTouchEvent和下級View的dispatchTouchView影響,表示是否消耗這個事件。
- onInterceptTouchEvent():表示是否攔截這個事件,如果當前View攔截,那么在同一個事件序列中,此方法不會再被調動,返回結果表示是否攔截。
- onTouchEvent:用來處理單擊事件,返回值表示是否消耗當前事件。
- 當一個MotionEvent產(chǎn)生以后,系統(tǒng)需要把這些事件傳遞給一個具體的View,這個傳遞的過程就是分發(fā)過程。
- View的滑動沖突
- 內外滑動方向不一致:ScrollView和ListView的沖突:左右滑時,讓外部攔截點擊事件,上下滑時,內部攔截,所以首先需要判斷滑動的方向。。
- 內外滑動方向一致:無法判斷用戶想讓哪一層滑動:不能通過方向判斷,可以通過業(yè)務邏輯(設置狀態(tài))。
- 以上的嵌套。
《Android開發(fā)藝術探索》-第三章-View的事件體系
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- layout: postdate: 2016-01-08title: Android開發(fā)藝術探索-第三章-View...
- 什么是View View 是 Android 中所有控件的基類。 View的位置參數(shù) View 的位置由它的四個頂...
- 注:此篇筆記只記錄重難點,對于基礎和詳細內容請自行學習《Android開發(fā)藝術探索》 View的基礎知識 什么是V...
- 3.1 View基礎知識 View是Android所有控件的基類;View是一種界面層的控件的一種抽象;ViewG...