編輯:關於Android編程
android 的這個事件的分發傳遞,處理的解決方式,
實質應該是 java設計模式裡面的 責任鏈模式了。
在這裡,想用最少的話,最通俗易懂的方式記錄
View的方法
// 事件分發,默認返回false
public boolean dispatchTouchEvent(MotionEvent event)
// 事件處理,默認返回false
public boolean onTouchEvent(MotionEvent event)
ViewGroup的方法
// 事件分發,默認返回false
public boolean dispatchTouchEvent(MotionEvent event)
// 事件處理,默認返回false
public boolean onTouchEvent(MotionEvent event)
// 攔截默認,默認返回false
// 返回true 就不會往下傳遞事件,自己onTouchEvent處理
// 返回false 向下傳遞事件
public boolean onInterceptTouchEvent(MotionEvent ev)
當觸發一個事件,父布局會優先得到這個事件進行分發,也就是一般的
單獨View (如果設置了OnTouchListener)
dispatchEvent–setOnTouchListener–onTouchEvent
單獨看ViewGroup (如果設置了OnTouchListener)
dispatchTouchEvent –onInterceptTouchEvent–setOnTouchListener– onTouchEvent
3.ViewGroup 嵌套View,
也就是我們平常最有用最關心的
前面說了底層的View能夠接收到這次的事件有一個前提條件:在父層級允許的情況下。假設不改變父層級的dispatch方法,在系統調用底層onTouchEvent之前會先調用父View的onInterceptTouchEvent方法判斷,父層View是不是要截獲本次touch事件之後的action。
所以下面的這個東西一定要分清楚,這個還是很重要的,很多人很模糊,或者說很ran
事件的分發上的執行順序:
(父)dispatchTouchEvent
↓
(父)onInterceptTouchEvent
↓
(子)dispatchEvent
事件的處理執行順序
(子)onTouchEvent
↓
(父)onTouchEvent
4 如果父View 和 子View都設置的點擊事件相應的問題了
其實是都可以響應的,不多說,ListView中的adapter item布局都寫的多了。
5 requestDisallowInterceptTouchEvent
requestDisallowInterceptTouchEvent 是ViewGroup類中的一個公用方法
Called when a child does not want this parent and its ancestors to intercept touch events with ViewGroup.onInterceptTouchEvent(MotionEvent).
This parent should pass this call onto its parents. This parent must obey this request for the duration of the touch (that is, only clear the flag after this parent has received an up or a cancel.
實際的應用中,可以在子view的ontouch事件中注入父ViewGroup的實例,並調用requestDisallowInterceptTouchEvent去阻止父view攔截點擊事件
原來listView 第一行, 嵌套ViewPager ,其他行嵌套別的中就需要用到這個
需要在子布局中操作,父布局不攔截自身事件
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
//讓父類不攔截觸摸事件就可以了。
this.getParent().requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(ev);
}
本文實例講述了Android編程獲取系統隱藏服務實現鎖屏的方法。分享給大家供大家參考,具體如下:實現原理:當按鎖屏鍵時,會發出一個廣播,當界面接收到一個廣播就可以實現鎖頻
返回上一個界面finish()方法 Android可以使用finish()方法,實現函數返回的功能,當不是Activity內部調用時,需要使用getActi
三種布局方式android對布局優化提供了三種布局:這三種布局都可以簡化我們的布局文件,優化繪制流程,下面我們簡單看一下這三種組件的使用方式。1、重用布局"ht
先來看看效果圖就是簡單的根據手指寫下的軌跡去畫出內容一、實現之前一篇文章裡提到了android官方給出的自定義控件需要考慮以下幾點:創建View處理View的布局繪制Vi