2 回答
TA贡献1851条经验 获得超5个赞
此代码可以区分单击和移动(拖动,滚动)。在onTouchEvent中,设置标志isOnClick,并在ACTION_DOWN上设置初始X,Y坐标。清除ACTION_MOVE上的标志(注意通常会检测到意外移动,这可以通过THRESHOLD常量解决)。
private float mDownX;
private float mDownY;
private final float SCROLL_THRESHOLD = 10;
private boolean isOnClick;
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
isOnClick = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (isOnClick) {
Log.i(LOG_TAG, "onClick ");
//TODO onClick code
}
break;
case MotionEvent.ACTION_MOVE:
if (isOnClick && (Math.abs(mDownX - ev.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - ev.getY()) > SCROLL_THRESHOLD)) {
Log.i(LOG_TAG, "movement detected");
isOnClick = false;
}
break;
default:
break;
}
return true;
}
对于上述建议的LongPress,GestureDetector是必经之路。检查以下问答:
使用Android检测长按
添加回答
举报