Android中的DoubleTap
这个问题在这里已经有了答案:
如果你设置正确, GestureListener
的OnDoubleTapListener
非常有用。 你不需要处理每一个水龙头,并计算两者之间的时间。 相反,让Android为您处理什么是水龙头,双击,滚动或投掷。 使用实现GestureListener
和OnDoubleTapListener
的帮助程序类SimpleGestureListener
,您不需要太多操作。
findViewById(R.id.touchableText).setOnTouchListener(new OnTouchListener() {
private GestureDetector gestureDetector = new GestureDetector(Test.this, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.d("TEST", "onDoubleTap");
return super.onDoubleTap(e);
}
... // implement here other callback methods like onFling, onScroll as necessary
});
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d("TEST", "Raw event: " + event.getAction() + ", (" + event.getRawX() + ", " + event.getRawY() + ")");
gestureDetector.onTouchEvent(event);
return true;
}
});
注意:我测试了很长时间才发现, return true
和return false
的正确组合是什么。 这是这里非常棘手的部分。
另一个注意事项:当你测试这个时, 在真实设备上而不是仿真器上进行。 我很难让鼠标足够快地创建onFling事件。 真实设备上的真实手指似乎要快得多。
更好的选择是创建一个轻量级的抽象类
public abstract class DoubleClickListener implements OnClickListener {
private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds
long lastClickTime = 0;
@Override
public void onClick(View v) {
long clickTime = System.currentTimeMillis();
if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
onDoubleClick(v);
lastClickTime = 0;
} else {
onSingleClick(v);
}
lastClickTime = clickTime;
}
public abstract void onSingleClick(View v);
public abstract void onDoubleClick(View v);
}
并使用它
view.setOnClickListener(new DoubleClickListener() {
@Override
public void onSingleClick(View v) {
}
@Override
public void onDoubleClick(View v) {
}
});
非常简单的逻辑使用以下代码
boolean firstTouch = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == event.ACTION_DOWN){
if(firstTouch && (Helper.getCurrentTimeInMilliSeconds() - time) <= 300) {
//do stuff here for double tap
Log.e("** DOUBLE TAP**"," second tap ");
firstTouch = false;
} else {
firstTouch = true;
time = Helper.getCurrentTimeInMilliSeconds();
Log.e("** SINGLE TAP**"," First Tap time "+time);
return false;
}
}
return true;
}
链接地址: http://www.djcxy.com/p/91215.html
上一篇: DoubleTap in android