Android事件分发之View篇上(默认可点击的View,这里就用Button做代表)

本文详细探讨了Android中View的事件分发过程,以Button为例,通过分析dispatchTouchEvent、onTouch和onTouchEvent的交互,揭示了事件处理的流程。在默认情况下,事件传递路径为dispatchTouchEvent->onTouch->onTouchEvent,最终触发onClick。当在setOnTouchListener中返回true时,会改变事件处理顺序,导致onClick不执行。通过对源码的深入解析,揭示了onClick方法在ACTION_UP时的performClick方法中被调用。
摘要由CSDN通过智能技术生成
一直想找时间把view事件分发这块搞清楚,最近认真研究了这块后,把自己理解的记录一下
正常情况下一次完整的触摸事件,应该是一个DOWN,多个MOVE,和一个UP组成。

View事件相关一般就这三个地方了,一个dispatchTouchEvent,一个setOnTouchListener,一个onTouchEvent。首先我们先自定义一个View继承Button(默认可以点击的view,为什么button默认可点击呢)

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
   
        switch (ev.getAction()) {
   
            case MotionEvent.ACTION_DOWN:
                Log.e(EventActivity.TAG, "dispatchTouchEvent_ACTION_DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.e(EventActivity.TAG, "dispatchTouchEvent_ACTION_MOVE");
                break;
            case MotionEvent.ACTION_UP:
                Log.e(EventActivity.TAG, "dispatchTouchEvent_ACTION_UP");
                break;
            default:
                break;
        }
        return super.dispatchTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
   
        switch (event.getAction()) {
   
            case MotionEvent.ACTION_DOWN:
                Log.e(EventActivity.TAG, "onTouchEvent_ACTION_DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值