关于OnTouchListener中的onTouch()触发的不同事件说明

public boolean onTouch(View v, MotionEvent event);  

View v是触发事件的源,MotionEvent event即一个触摸事件。不同的事件在MotionEvent中有不同的id,我们可以根据event.getAction() & MotionEvent.ACTION_MASK的结果来判断是何种事件。

  • MotionEvent.ACTION_DOWN:在第一个点被按下时触发
  • MotionEvent.ACTION_UP:当屏幕上唯一的点被放开时触发
  • MotionEvent.ACTION_POINTER_DOWN:当屏幕上已经有一个点被按住,此时再按下其他点时触发。
  • MotionEvent.ACTION_POINTER_UP:当屏幕上有多个点被按住,松开其中一个点时触发(即非最后一个点被放开时)。
  • MotionEvent.ACTION_MOVE:当有点在屏幕上移动时触发。值得注意的是,由于它的灵敏度很高,而我们的手指又不可能完全静止(即使我们感觉不到移动,但其实我们的手指也在不停地抖动),所以实际的情况是,基本上只要有点在屏幕上,此事件就会一直不停地被触发。
附一些关于这方面的链接地址:

http://blog.csdn.net/barryhappy/article/details/7392326

http://www.cnblogs.com/devinzhang/archive/2012/02/27/2369942.html

http://blog.csdn.net/wangdong20/article/details/8561141


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android,焦点事件和长按事件是两个不同的概念,但它们有时可以组合使用来实现特定的交互行为。焦点事件(FocusChangeEvent)通常发生在用户点击或触摸某个控件使其获得焦点时,而长按事件(LongClickEvent)则发生在用户对某个控件持续按下一段时间。 如果你想让一个控件在用户长按时触发焦点事件,你不能直接将焦点事件处理程序与长按事件关联起来。然而,你可以利用`OnTouchListener`或`View.OnFocusChangeListener`结合`MotionEvent.ACTION_DOWN`(表示开始按压)和`MotionEvent.ACTION_UP`(表示释放)来模拟长按效果,并在长按期间执行相应的焦点操作。 以下是一个简单的例子: ```java Button myButton = findViewById(R.id.my_button); myButton.setOnTouchListener(new View.OnTouchListener() { private long pressStartTime; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: pressStartTime = System.currentTimeMillis(); break; case MotionEvent.ACTION_UP: if ((System.currentTimeMillis() - pressStartTime) > MIN_LONG_PRESS_TIME) { // 触发焦点事件或执行相关操作 v.requestFocus(); // 或者 v.performClick(); } break; default: return false; } return true; } }); ``` 在这个例子,`MIN_LONG_PRESS_TIME`是一个设定的阈值(如500毫秒),如果用户按住时间超过这个阈值,就会触发焦点事件。请注意,这只是一个基本的示例,实际应用可能需要更复杂的逻辑来处理不同情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值