没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
项目中总会用到一些触摸事件,每次使用都是百度各种资料,看各种大神的分析笔记。这次我自己总结下关于触摸事件的一些知识点。一来可以让自己对触摸事件印象更加深刻,也给以后的项目做一个参考。最难理解的其实是onTouchEvent方法。 一、 概述 1.只有view,ViewGroup,Activity 具有事件分发和消费的功能。 2.Activity因为上最先接触到触摸事件,因此Activity没有事件拦截方法。即没有dispatchTouchEvent方法。 3.对于不能添加子控件的view,不能对事件进行分发和拦截,它只有onTouchEvent事件。 二、三个方法 1.public bool
资源推荐
资源详情
资源评论
android onTouchEvent处理机制总结处理机制总结(必看必看)
项目中总会用到一些触摸事件,每次使用都是百度各种资料,看各种大神的分析笔记。这次我自己总结下关于触摸事件的一些
知识点。一来可以让自己对触摸事件印象更加深刻,也给以后的项目做一个参考。最难理解的其实是onTouchEvent方法。
一、一、 概述概述
1.只有view,ViewGroup,Activity 具有事件分发和消费的功能。
2.Activity因为上最先接触到触摸事件,因此Activity没有事件拦截方法。即没有dispatchTouchEvent方法。
3.对于不能添加子控件的view,不能对事件进行分发和拦截,它只有onTouchEvent事件。
二、三个方法二、三个方法
1.public boolean dispatchTouchEvent(MotionEvent ev)
当触摸事件发生的时候,首先会被当前的activity进行分发,即当前activity的dispatchTouchEvent方法会被执行。
这个时候这个时候,该方法有三种返回的情况:该方法有三种返回的情况:
return false:: 表明事件不会被进行分发。事件会以冒泡的方式被传递给上层的view或activity的onTouchEvent方法进行消费
掉。
return true::表明该时间已经被处理。事件会被当前view或activity的dispatchTouchEvent给消费掉。不会再进行传递,事件
到此结束。
return super.dispatchTouchEvent(ev)::表明该事件将会被分发。此时当前View的onIntercepterTouchEvent方法会捕获该
事件,判断需不需要进行事件的拦截。
2.public boolean onInterceptTouchEvent(MotionEvent ev)
该方法用户拦截被传递过来的事件,用于判断被传递过来的事件是否需要被当前的view进行处理。
return false ::不对事件进行拦截,放行该事件。事件会被传递到当前view的子控件中,由子控件中的dispatchTouchEvent方
法进行分发处理。
return true :: 拦截该事件,将该事件交给当前view的onTouchEvent方法进行处理。
return super.inInterceptTouchEvent(ev):默认拦截方式,和return true一样。该事件会被拦截,将该事件交给当前view的
onTouchEvent方法进行处理。(这里需要有一点说明,当有两个view。A view中有一个B view.点击A.A中如果
onInterceptTouchEvent()返回super.interceptTouchEvent(ev),则事件将会被A进行拦截,交给A的onTouchEvent()进行处理,
如果点击的是B,A中如果onInterceptTouchEvent()返回super.interceptTouchEvent(ev),则事件将不会被拦截,会被分发到子
控件中)
3.public boolean onTouchEvent(MotionEvent event)
当前的view把事件进行了拦截,则事件则会被传递到该方法中
return false::表明没有消费该事件,事件将会以冒泡的方式一直被传递到上层的view或Activity中的onTouchEvent事件处
理。如果最上层的view或Activity中的onTouchEvent还是返回false。则该事件将消失。接下来来的一系列事件都将会直接被上
层的onTouchEvent方法捕获
return true:: 表明消费了该事件,事件到此结束。
return super.onTouchEvent(event)::默认情况,和return false一样。
验证:验证:
MainActivity FatherView ChildView中几个方法都返回super.****TouchEvent(ev)
分析:分析:
1、当点击屏幕。MainActivity 中的dispatchTouchEvent方法先执行,打印MainActivity-dispatchTouchEvent–
>ACTION_DOWN
2、因为返回的是super.dispatchTouchEvent(ev),所以事件ev将会被分发,但是MainActivity中没有onInterceptTouchEvent()方
法,所以事件被传递到FatherView中的dispatchTouchEvent方法.打印FatherView-dispatchTouchEvent–>ACTION_DOWN
3、在FatherView中dispatchTouchEvent返回的是super.dispatchTouchEvent(ev),所有事件会被分发。FatherView中的
onInterceptTouchEven()中的方法被执行。打印FatherView-onInterceptTouchEven–>ACTION_DOWN
资源评论
weixin_38733597
- 粉丝: 8
- 资源: 909
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功