【发布时间】:2013-07-27 14:21:05
【问题描述】:
我们如何通过触摸事件模拟长按?或者我们如何计算屏幕被触摸的时间,都处于 ACTION_DOWN 状态?
【问题讨论】:
标签: android event-handling touch-event long-press
我们如何通过触摸事件模拟长按?或者我们如何计算屏幕被触摸的时间,都处于 ACTION_DOWN 状态?
【问题讨论】:
标签: android event-handling touch-event long-press
试试这个。您无需为此寻找 hack。
final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Log.e("", "Longpress detected");
}
});
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
}
return true;
}
};
【讨论】:
我终于实现了触摸屏长按,谢谢:
textView.setOnTouchListener(new View.OnTouchListener() {
private static final int MIN_CLICK_DURATION = 1000;
private long startClickTime;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
longClickActive = false;
break;
case MotionEvent.ACTION_DOWN:
if (longClickActive == false) {
longClickActive = true;
startClickTime = Calendar.getInstance().getTimeInMillis();
}
break;
case MotionEvent.ACTION_MOVE:
if (longClickActive == true) {
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (clickDuration >= MIN_CLICK_DURATION) {
Toast.makeText(MainActivity.this, "LONG PRESSED!",Toast.LENGTH_SHORT).show();
longClickActive = false;
}
}
break;
}
return true;
}
});
其中private boolean longClickActive = false; 是一个类变量。
【讨论】:
您必须计算 ACTION_DOWN 和 ACTION_UP 事件之间的时间。 只在 ACTOIN_DOWN 状态下无法计算这个时间,因为它是代表 LONG TAP 事件的 TAP 的事件序列的 START 事件
【讨论】: