2016-02-25 2 views
0

У меня есть кнопка. Когда пользователь удерживает кнопку, я хочу, чтобы видео было записано. Когда пользователь отпускает кнопку, я хочу добавить код для обработки видео и прекратить запись, однако как определить, когда пользователь отпустил кнопку, и onLongClickListener выполняется?Освобождение onLongClickListener Android

snap.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      try { 
       initRecorder(mCameraView.getHolder().getSurface()); 
       mMediaRecorder.start(); 
       try { 
        Thread.sleep(10 * 1000); // This will recode for 10 seconds, if you don't want then just remove it. 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       finish(); 
       return true; 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return false; 
     } 
    }); 
+0

Может быть, вам нужно зарегистрируйте прикосновение, а не длинный клик. Взгляните на этот https://stackoverflow.com/questions/3784514/capture-button-release-in-android – MoGa

+0

У меня уже есть встроенный onClickListener для кнопки, он делает снимок на клик и предназначен для записи видео по длинному клику, я уже реализовал функцию изображения, теперь я пытаюсь реализовать видео. Будет ли прослушиватель ontouch вмешиваться в прослушиватель onclick? – Alk

ответ

1

У меня есть готовый фрагмент для вашей цели, взгляните на это https://gist.github.com/0x0af/013c4e7a90a481e04f77#file-snippet-java.

В принципе, что вы делаете это осуществить View.OnTouchListener() и ждать MotionEvent.ACTION_DOWN и MotionEvent.ACTION_UP

UPDATE: использовать таймер, чтобы определить, если действие было длительное нажатие

+0

будет ли onTouchListener каким-либо образом вмешиваться в onClickListener, который я уже установил для кнопки? Я хочу две функциональности для кнопки, один снимает фотографии, когда пользователь просто нажимает кнопку (уже реализованную с помощью onClickListener), а вторая - видеозапись с событием hold/release. – Alk

+0

Я рекомендую измерить время печати - это должно сказать вам, была ли ваша пресса длинной – xAF

+0

Не могли бы вы подробно рассказать об этом. – Alk

0

Посмотрите на GestureDetector, где вы можете обнаружить LongPress, а затем проанализировать onTouchEvent. Хорошая информация здесь Detecting a long press with Android

Я использовал его в следующем виде:

Определение GestureDetector экземпляра:

private class LongPressGestureDetector extends GestureDetector { 
    private boolean longPressDetected = false; 

    public LongPressGestureDetector(Context context, OnGestureListener listener) { 
     super(context, listener); 
    } 
} 

И затем использовать его:

gestureDetector = new LongPressGestureDetector(holder.rootView.getContext(), 
      new GestureDetector.SimpleOnGestureListener() { 
       @Override 
       public void onLongPress(MotionEvent event) { 
        gestureDetector.longPressDetected = true; 
       } 
      }); 

    //set the content touch listener 
    holder.rootView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      gestureDetector.onTouchEvent(event); 
      if (gestureDetector.longPressDetected) { 
       Log.d(getClass().getSimpleName(), "Handle longPress touch event."); 
       gestureDetector.longPressDetected = false; 
       return true; 
      } 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 
        // handle MotionEvent.ACTION_DOWN 
        break; 
       } 
       case MotionEvent.ACTION_UP: { 
        // handle MotionEvent.ACTION_UP 
        break; 
       } 
       case MotionEvent.ACTION_CANCEL: { 
        // handle MotionEvent.ACTION_CANCEL 
        break; 
       } 
      } 
      return true; 
     } 
    }); 
} 
+0

Вы предлагаете добавить метод GestureDetector onTouchEvent внутри моего прослушивателя onLongClick? Я немного смущен, не могли бы вы привести пример того, как вы будете использовать это, чтобы обнаружить, что пользователь больше не держит палец на кнопке? – Alk

+0

Я обновил свой ответ на примере. – liminal

+0

У меня также есть onClickListener, определенный для этой кнопки, который делает снимок, когда пользователь просто нажимает кнопку. Будет ли этот код вмешиваться в это, поскольку я понимаю, что onTouchListener и onClickListener будут запускаться симулятивно? – Alk

Смежные вопросы