onTouch onClick onLongClick

执行顺序

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

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,事件不会向下传递!

      • 这样就比较明了了!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值