android如何判断点击事件次数,安卓中区分点击事件和滑动事件

为了实时的感应用户对屏幕的手指操作,安卓系统提供了onTouchEvent()方法来捕获用户操作的事件,其经常使用的有三类: ACTION_DOWN, ACTION_UP, ACTION_MOVE。

现在想要实现的效果是:当手机按住屏幕时,如果在指定的时间内没有移动,那么识别为点击图标。如果手指按住屏幕就立马移动,那么就识别为拖动图标。

一般情况下,我们想实现什么样的方法,只需要在对应的类下边编写算法即可。大概思路如下:在按下时记录

x,y坐标以及按下时间,当第一次移动的时候获取移动的时间,如果大于指定的长按时间,那么识别为点击,否则就是节点拖动。很容易,在模拟器里面实现了这

个效果,但是当在真机里面运行时,却无法实现这样的效果。原因是模拟器点击的时候能够保证在不移动鼠标的情况下不触发ACTION_MOVE,但是真机却

很敏感,几乎在ACTION_DOWN后的几毫秒之后就立马不停的ACTION_MOVE了。所以,单单从手指按下的时间长短上区分点击事件和滑动时间并

不是很理想,所以,在这里将要介绍另一种方法:通过按下后手指的位移大小来区分事件。

MotionEvent

类提供了记录当前坐标的函数(getX(),getY())和当前事件产生的时间的函数(getEventTime())以及按下时间

(getDowntime())。MotionEvent同时也提供了当前的操作类型,按下(ACTION_DOWN)、 移动

(ACTION_MOVE)、弹起 (ACTION_UP)。有了这些参数,我们便可以轻易的实现想要的效果了。

当一开始点击的时候,记录下当前的位置坐标

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

float x = 0;

float y = 0;

button = false;

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

x = event.getX();

y = event.getY();

for (moveNodeNum = 0; moveNodeNum < NUM; moveNodeNum++) {

if ((x < zNode[moveNodeNum].posX + TOUCHRADIUS)

&& (x > zNode[moveNodeNum].posX - TOUCHRADIUS)

&& (y < zNode[moveNodeNum].posY + TOUCHRADIUS)

&& (y > zNode[moveNodeNum].posY - TOUCHRADIUS)) {

tx = zNode[moveNodeNum].posX;

ty = zNode[moveNodeNum].posY;

当手指产生位移时候,判断位移的大小

else if (event.getAction() == MotionEvent.ACTION_MOVE) {

x = event.getX();

y = event.getY();

if ((moveNodeNum >= 0) && (moveNodeNum < NUM)) {

if (moveNodeKind == 1) {

if ((Math.abs(x - tx) > 30) || (Math.abs(y - ty) > 30)) {

button = false;

如果小于30像素的时候,认为手指只是有轻微的移动,即识别为点击,不识别为拖动,更改button 来实现效果的判断。

if (button == true) {//为真时为点击效果,为假时识别为拖动

只要在对应button的不同位置实现相应的代码即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值