【问题标题】:Protect View from continuous touch events保护 View 免受连续触摸事件的影响
【发布时间】:2014-10-28 14:36:00
【问题描述】:

我正在构建一个像 vine 这样的相机应用,只要你将手指放在屏幕上,你就可以在其中录制视频。

我的问题:如果有人快速连续地点击屏幕,相机逻辑会收到太多事件。它不断尝试写入文件、关闭记录器、打开新连接等等。

当必须在太短的时间内频繁地开始和停止录制时,相机似乎非常脆弱。

我尝试设置一个标志,以防止新的运动事件在相机仍在忙于处理之前的操作时访问相机。这很丑,但它有效。主要问题是,运动事件似乎会提示并一个接一个地被触发,从而导致太多的事件。

我正在使用运动事件 ACTION_UPACTION_DOWN 来检测用户是否将手指放在屏幕上或松开手指。

有没有一种好方法可以在相机处理其准备和释放期间禁用捕捉运动事件?

【问题讨论】:

  • 你有没有试过在你点击后给一个 500 毫秒到 1000 毫秒的计时器,因为有人点击了所以它不会开始录制,在ACTION_UP 你可以重置计时器
  • 在初始 'MotionEvent.ACTION_DOWN' 事件之后,所有后续的触摸事件(用户将手指放在屏幕上)都将是 'MotionEvent.ACTION_MOVE' 事件,直到用户将手指从屏幕上抬起这将注册为“MotionEvent.ACTION_UP”事件。所以检查'MotionEvent.ACTION_MOVE'是否是初始并开始记录。
  • 丑陋,但这可能是一种选择。似乎相机周围的很多事情都只能与丑陋的变通方法一起使用,例如计时器和滥用 try{} catch{} :-/
  • 是的,您必须控制它,只需发布​​代码即可
  • 但它给你的是他真的握着他的手指而不仅仅是点击。

标签: android android-camera android-event


【解决方案1】:

试试这个:

//Class Variable
Timer timer;

 public boolean onTouch(View view, MotionEvent event) {
        // Check event type

        switch (event.getAction()) {

        // Finger down
        case MotionEvent.ACTION_DOWN:
              timer = new Timer();
              timer.schedule(recordingfunc(),1000);
                break;
        case MotionEvent.ACTION_UP:
           if(timer!=null){  
                  timer.cancel();
}
                      break;
     }
}

【讨论】:

    猜你喜欢
    • 2012-04-05
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2011-07-02
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多