Android监听ScrollView滚动事件_安卓触控类MotionEvent
2014-10-10 15:55:59  By: dwtedx

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的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

DD记账
top
+