Simulate Long press by Touch events

前端 未结 4 1538
执念已碎
执念已碎 2021-02-06 18:08

How can we simulate long press by touch event? or how can we calculate the time that screen is touched, all in ACTION_DOWN state?

相关标签:
4条回答
  • 2021-02-06 18:56

    I have implemented a Touch screen long click finally , thx all:

    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;
        }
    });
    

    in which private boolean longClickActive = false; is a class variable.

    0 讨论(0)
  • 2021-02-06 18:56

    You have to count time between ACTION_DOWN and ACTION_UP events. It's impossible to calculate this time only in ACTOIN_DOWN state, cause it's the START event of sequence of events representing TAP of LONG TAP event

    0 讨论(0)
  • 2021-02-06 19:07

    For calculating touch count you can get getPointerCount() of your event like here

    and for Long click maybe this helps

    Edit: and hope this link help you determining getting touch duration

    0 讨论(0)
  • 2021-02-06 19:11

    Try this. You don't need to find hack for this.

    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;
    }
    };
    
    0 讨论(0)
提交回复
热议问题