论坛首页 移动开发技术论坛

Android自定义长按事件

浏览 12255 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-02-21  
在onTOuch里面监听action-move执行的次数也可以实现longclick,
不知道有没意义,性能怎么样?
0 请登录后投票
   发表时间:2011-02-21  
binggo2011 写道
在onTOuch里面监听action-move执行的次数也可以实现longclick,
不知道有没意义,性能怎么样?

  不明白,监听action-move执行次数有什么作用?多少次算是longclick?
0 请登录后投票
   发表时间:2011-02-22  
chroya 写道
binggo2011 写道
在onTOuch里面监听action-move执行的次数也可以实现longclick,
不知道有没意义,性能怎么样?

  不明白,监听action-move执行次数有什么作用?多少次算是longclick?


/**
* 自定义图片左右手势和类LongClick触发事件
* @author Administrator
*
*/
public abstract class MyOnTouchListener implements OnTouchListener {

private static final int MOVE_MIN_DISTANCE = 100; //触发左移或右移的最小距离
private static final int LONG_CLICK_MIN_DISTANCE = 20; //触发LongClick的最大移动距离
private static final int LONG_CLICK_MIN_TIME = 35; //触发LongClick的最小ACTION_MOVE的次数
private float mX;
private int mNum = 0;

public abstract void setLeftEvent();

public abstract void setRightEvent();

public abstract void setLongClickEvent();

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mX = event.getX();
return false;
case MotionEvent.ACTION_CANCEL:

return false;
case MotionEvent.ACTION_MOVE:
System.out.println("MOVE");
mNum++;
return false;
case MotionEvent.ACTION_OUTSIDE:

return false;
case MotionEvent.ACTION_UP:
float distance = event.getX() - mX;
if (Math.abs(distance) > MOVE_MIN_DISTANCE) {
if (distance > 0)
setRightEvent();
else
setLeftEvent();
} else if (Math.abs(distance) < LONG_CLICK_MIN_DISTANCE
&& mNum > LONG_CLICK_MIN_TIME) {
setLongClickEvent();
}
mNum = 0;
return true;
}
return false;
}
}

我哥介绍看你的博客的  说看了能变超人的... 呃.
0 请登录后投票
   发表时间:2011-02-22  
binggo2011 写道
chroya 写道
binggo2011 写道
在onTOuch里面监听action-move执行的次数也可以实现longclick,
不知道有没意义,性能怎么样?

  不明白,监听action-move执行次数有什么作用?多少次算是longclick?


/**
* 自定义图片左右手势和类LongClick触发事件
* @author Administrator
*
*/
public abstract class MyOnTouchListener implements OnTouchListener {

private static final int MOVE_MIN_DISTANCE = 100; //触发左移或右移的最小距离
private static final int LONG_CLICK_MIN_DISTANCE = 20; //触发LongClick的最大移动距离
private static final int LONG_CLICK_MIN_TIME = 35; //触发LongClick的最小ACTION_MOVE的次数
private float mX;
private int mNum = 0;

public abstract void setLeftEvent();

public abstract void setRightEvent();

public abstract void setLongClickEvent();

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mX = event.getX();
return false;
case MotionEvent.ACTION_CANCEL:

return false;
case MotionEvent.ACTION_MOVE:
System.out.println("MOVE");
mNum++;
return false;
case MotionEvent.ACTION_OUTSIDE:

return false;
case MotionEvent.ACTION_UP:
float distance = event.getX() - mX;
if (Math.abs(distance) > MOVE_MIN_DISTANCE) {
if (distance > 0)
setRightEvent();
else
setLeftEvent();
} else if (Math.abs(distance) < LONG_CLICK_MIN_DISTANCE
&& mNum > LONG_CLICK_MIN_TIME) {
setLongClickEvent();
}
mNum = 0;
return true;
}
return false;
}
}

我哥介绍看你的博客的  说看了能变超人的... 呃.

根据次数判断长按,太不严谨了 
别被误导了
0 请登录后投票
   发表时间:2011-05-16  
楼主的文章不错
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics