3

我们如何通过触摸事件模拟长按?或者我们如何计算屏幕被触摸的时间,都处于 ACTION_DOWN 状态?

4

4 回答 4

14

我终于实现了触摸屏长按,谢谢:

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;是一个类变量。

于 2013-07-27T10:19:02.817 回答
3

试试这个。你不需要为此寻找黑客。

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;
}
};
于 2017-11-29T11:52:52.340 回答
2

要计算触摸计数,您可以像这里一样获取事件的 getPointerCount()

对于长按可能会有所帮助

编辑:并希望此链接可以帮助您确定获得触摸的持续时间

于 2013-07-27T09:23:17.060 回答
1

您必须计算 ACTION_DOWN 和 ACTION_UP 事件之间的时间。只在 ACTOIN_DOWN 状态下无法计算这个时间,因为它是代表 LONG TAP 事件的 TAP 的事件序列的 START 事件

于 2013-07-27T09:31:27.720 回答