【问题标题】:Android detect double finger long pressAndroid检测双指长按
【发布时间】:2013-11-04 17:23:36
【问题描述】:

我正在创建一个可以在图片上绘图的应用程序。绘图是通过一个pictureView、一个带有位图的canvas和一个onTouchListener来实现的。 我想添加一个功能,当有两根手指按下时将撤消最后一个操作。 我通过这样做实现了它:

if(event.getActionMasked() == MotionEvent.ACTION_POINTER_UP ){
    //undo
}

当有两根手指按下时,我想撤消所有绘图操作。 我试过这样的东西,但它只会检测一次。

if(event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN ){
    numberOfDown++;
        if(numberOfDown>100){
            //undo
        }
}

我怎样才能实现我想要的?

【问题讨论】:

  • 你试过比较DOWNvUP的时间吗? DOWN 每个手指只会触发一次。
  • 我刚试过,但并不完全是我想要的。它现在只会撤消发布时的所有操作。

标签: android ontouchlistener motionevent


【解决方案1】:

我不确定主手指或非主手指的动作索引是否从零开始,因此您可能需要将这些 0 翻转为 1。

if(event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN && event.getActionIndex()==0){
    mSecondFingerTimeDown = System.currentTimeMillis();
}

if(event.getActionMasked() == MotionEvent.ACTION_POINTER_UP && event.getActionIndex()==0 ){
    if ((System.currentTimeMillis()-mSecondFingerDownTime) >= LONG_PRESS_TIME_MILLIS)
        //long double-press action
    else
        //short double-press action
}

【讨论】:

  • 我意识到有这样一种情况,用户将一根手指放下一会儿,然后再轻敲第二根手指(短时间或长时间)并释放它而不松开第一根手指。这将使用此代码注册为两指轻敲,即使第一根手指尚未释放。为了避免这种情况变得更加复杂。在上面的代码中,不是立即执行操作,而是存储待处理的操作(长按或短按),并存储时间。当第一根手指执行 ACTION_UP 时,检查是否在很短的时间内决定是否执行待处理的操作。
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 2018-08-17
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2011-06-22
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多