Android监听ScrollView滚动事件_安卓触控类MotionEvent
2014-10-10 15:55:59 By: shinyuu
ScrollView滑动事件捕获、其实和其实事件使用起来一样、都是绑定事件
下面是源代码
scrollView.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_MOVE){ //可以监听到ScrollView的滚动事件 Toast.makeText(this, "sdfsdfsdf", Toast.LENGTH_SHORT).show(); } return false; } });
下面介绍一下 MotionEvent 这个类
Android在MotionEvent里定义了一系列的手势事件
其中包括:
MotionEvent.ACTION_DOWN
当屏幕检测到第一个触点按下之后就会触发到这个事件
MotionEvent.ACTION_MOVE
当触点在屏幕上移动时触发、触点在屏幕上停留也是会触发的、主要是由于它的灵敏度很高
而我们的手指又不可能完全静止(即使我们感觉不到移动、但其实我们的手指也在不停地抖动)
MotionEvent.ACTION_POINTER_DOWN
当屏幕上已经有触点处于按下的状态的时候、再有新的触点被按下时触发
MotionEvent.ACTION_POINTER_UP
当屏幕上有多个点被按住、松开其中一个点时触发(即非最后一个点被放开时)触发
MotionEvent.ACTION_UP
当最后一个触点松开时被触发
MotionEvent.ACTION_SCROLL
非触摸滚动、主要是由鼠标、滚轮、轨迹球触发
MotionEvent.ACTION_CANCEL
不是由用户直接触发、有系统再需要的时候触发、例如当父view通过使函数onInterceptTouchEvent()返回true
从子view拿回处理事件的控制权是、就会给子view发一个ACTION_CANCEL事件
这里了view就再也不会收到事件了、可以将其视为ACTION_UP事件对待
onInterceptTouchEvent()函数与onTouchEvent()的区别
1、onInterceptTouchEvent()是用于处理事件(类似于预处理、当然也可以不处理)并改变事件的传递方向
也就是决定是否允许Touch事件继续向下(子view)传递、一但返回True(代表事件在当前的viewGroup中会被处理)
则向下传递之路被截断(所有子view将没有机会参与Touch事件)同时把事件传递给当前的view的onTouchEvent()处理
返回false、则把事件交给子view的onInterceptTouchEvent()
2、onTouchEvent()用于处理事件、返回值决定当前view是否消费(consume)了这个事件
也就是说在当前view在处理完Touch事件后、是否还允许Touch事件继续向上(父view)传递、一但返回True
则父view不用操心自己来处理Touch事件、返回true、则向上传递给父view(注:可能你会觉得是否消费了有关系吗
反正我已经针对事件编写了处理代码?答案是有区别!比如ACTION_MOVE或者ACTION_UP发生的前提是一定曾经发生了ACTION_DOWN
如果你没有消费ACTION_DOWN、那么系统会认为ACTION_DOWN没有发生过、所以ACTION_MOVE或者ACTION_UP就不能被捕获、)
若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力
想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)
或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)
如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教
为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)
感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛
shinyuu 2015-07-17 13:13:24 4 评 | 回复
@563011992@qq.com:恩恩、哥们说的也有道理、多谢