onTouch onClick onLongClick

本文通过一个具体的Android应用案例,详细解析了UI事件处理流程,包括onTouch、onLongClick及onClick等方法的触发顺序和条件,并针对不同返回值对事件传递的影响进行了说明。

执行顺序

废话不多说,看别人博客也只是别人说的,自己实践了才知道!

public class MainActivity extends ActionBarActivity implements OnTouchListener,
    OnClickListener, OnLongClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button) findViewById(R.id.test);

        btn.setOnTouchListener(this);
        btn.setOnClickListener(this);
        btn.setOnLongClickListener(this);
    }

    @Override
    public boolean onLongClick(View arg0) {

        System.out.println("onLongClick");
        return true;
    }

    @Override
    public void onClick(View arg0) {

        System.out.println("onClick");
    }

    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {

        if (arg1.getAction() == MotionEvent.ACTION_DOWN) {

            System.out.println("onTouch ACTION_DOWN");
            return true;
        } else if (arg1.getAction() == MotionEvent.ACTION_UP) {

            System.out.println("ACTION_UP");
            return false;
        }
        System.out.println("onTouch" + arg1.getAction());
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        System.out.println("onTouchEvent");
        return super.onTouchEvent(event);
    }
}

结论

经过实践,得到结论

  • 结论onLongClick在DOWN事件之后触发,onClick在UP事件触发
  • onLongClick,onTouch有返回值,返回true代表消费用户的UI事件,onClick没有返回值

    • 1.onTouch 返回true:

      • onTouch0
      • onTouch1
        事件在onTouch里面被消费了,就不会向下传递,所以在onLongClick,onClick都不会收到响应
    • 2.onTouch,onLongClick都返回false:
      短按

      • onTouch0
      • onTouch1
      • onClick
        长按
        *onTouch0
        *onLongClick
        *onTouch1
        *onClick

        onTouch返回false,事件向下传递,onLongClick返回false不消费 ,短按没有可说的,长按首先会走LongClick,之后向下传递走onCLick

      • 3.onTouch返回false,onLongClick返回true:

      • onTouch返回false,可以向下传递
      • 短按
      • onTouch0
      • onTouch1
      • onClick
        短按的话没有走到LongCLick,事件没有被消费,可以走到onClick

      • 长按

      • onTouch0
      • onLongClick
      • onTouch1
        长按事件被消费了,就不会向下传递了

      • 4.onTouch的Down事件返回false,up事件返回true
        貌似短按长按都会走LongClick

      • onTouch ACTION_DOWN
      • onTouch ACTION_UP
      • onLongClick
      • UP事件返回true,事件就不会传给onClick

      • 5.onTouch的Down事件返回true,up事件返回false

      • onTouch ACTION_DOWN
      • onTouch ACTION_UP
      • DOWN事件之后返回true,事件不会向下传递!

      • 这样就比较明了了!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值