android View事件体系结论总结
在了解android view事件体系前,先了解下android UI界面架构图。
android UI界面架构图
从上图可以简单总结出view触摸事件的传递顺序(假设点击到ViewGroup):
Activity--->PhoneWindow-->DecorView--->ContentView--->ViewGroup
View事件体系结论总结
当所有事件方法按默认返回时,ACTION_DOWN其呈现U形分布,其余的ACTION_MOVE和ACTION_UP事件只会经过Activity.onTouchEvent,不会经过其他控件。
当Activity.dispatchTouchEvent()返回true或false时,都表示事件被消费,不会向下传递了(只有默认返回super.dispatchTouchEvent()时,才会继续往下传递事件)。
ViewGroup.onInterceptTouchEvent()只有事件拦截作用,没有消费事件作用,即若有事件经过onInterceptTouchEvent()时,那么该事件肯定会继续进行传递,只是传递的方向受其返回值控制。
当dispatchTouchEvent()和onTouchEvent()返回true时,表明消费了事件,则事件不再进行传递。其后的同一事件序列的ACTION_MOVE和ACTION_UP都会从上往下只传递到该控件上该方法(该控件下的子控件是无法再收到任何事件的),如果该控件对MOVE和UP事件返回false,则其父控件的onTouchEvent并不会被调用,最终这些消失的事件都交给Activity.onTouchEvent处理。
当dispatchEvent()和onTouchEvent()返回false时,都会立即回掉父控件的onTouchEvent()。
onTouchListener.onTouch()会优先于onTouchEvent被调用,且只有当onTouchListener.onTouch()返回false时,onTouchEvetn才会被调用,然后才能调用onClickListener.onClick()。
更多相关文章
- 常用控件应用之文本框(TextView)特效
- android View长按事件简单写法
- android 文本框部分文字的点击事件
- Android 中input学习--取得input事件
- Android事件分发机制完全解析(二)
- android学习小结3-各种控件使用方式DEMO
- ListView中点击事件无法响应