2016-02-25 5 views
0

J'ai un bouton. Lorsque l'utilisateur détient le bouton, je souhaite enregistrer une vidéo. Lorsque l'utilisateur relâche le bouton, je veux ajouter du code pour traiter la vidéo et arrêter l'enregistrement, mais comment puis-je détecter quand l'utilisateur a relâché le bouton et que onLongClickListener est terminé?Libérer 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

Peut-être que vous devez enregistrer un contact même plutôt que l'écouteur à long clic. Jetez un oeil à ce https://stackoverflow.com/questions/3784514/capture-button-release-in-android – MoGa

+0

J'ai déjà un onClickListener mis en œuvre pour le bouton, il prend une photo sur le clic et est destiné à enregistrer une vidéo sur un long clic, j'ai déjà implémenté la fonctionnalité d'image, maintenant j'essaye de mettre en œuvre la vidéo. Est-ce que l'écouteur ontouch interférerait avec l'écouteur onclick? – Alk

Répondre

1

J'ai un extrait prêt pour votre but, jetez un oeil à elle https://gist.github.com/0x0af/013c4e7a90a481e04f77#file-snippet-java.

Fondamentalement, ce que vous faites est de mettre en œuvre View.OnTouchListener() et attendre MotionEvent.ACTION_DOWN et MotionEvent.ACTION_UP

MISE À JOUR: Utilisez une minuterie pour déterminer si l'action était une presse à long

+0

le onTouchListener interférerait de quelque façon avec un onClickListener que j'ai déjà défini pour le bouton? Je veux 2 fonctionnalités pour le bouton, l'une prend des photos quand l'utilisateur clique simplement sur le bouton (déjà implémenté avec onClickListener) et l'autre est l'enregistrement vidéo avec l'évènement hold/release. – Alk

+0

Je recommande de mesurer le temps de presse - cela devrait vous dire si votre presse était longue – xAF

+0

Pourriez-vous élaborer s'il vous plaît avec un court exemple. – Alk

0

Regardez dans GestureDetector où vous pouvez détecter LongPress puis analyser onTouchEvent. Bonne info ici Detecting a long press with Android

Je l'ai utilisé de la façon suivante:

Définir exemple GestureDetector:

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

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

Et utilisez-le:

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

Suggérez-vous que j'ajoute la méthode GestureDetector onTouchEvent dans mon écouteur onLongClick? Je suis un peu confus, pourriez-vous s'il vous plaît fournir un exemple de la façon dont vous utiliseriez cela pour détecter que l'utilisateur ne tient plus son doigt sur le bouton? – Alk

+0

J'ai mis à jour ma réponse avec un exemple. – liminal

+0

J'ai aussi un onClickListener défini pour ce bouton qui prend une photo lorsque l'utilisateur clique simplement sur le bouton. Est-ce que ce code interfèrerait avec cela, si je comprends bien, le onTouchListener et onClickListener seraient déclenchés de façon simulée? – Alk