Android détection de double robinet sans robinet
je voudrais détecter un double robinet, MAIS sans déclencher un seul robinet. j'ai essayé de double-cliquer auditeurs, mais vous obtenez toujours un onSingleTapUp avant le double est détecté, ce qui est raisonnable je pense. mais dans mon application, je ne veux vraiment pas la seul clic de rappel quand il y a un double-clic sur le chemin.
je me rends compte aucune application ne peut prédire l'avenir (ou je serais vraiment très riche), mais je pensais, il suffit de lancer un timer sur la simple clic et si il n'y a pas de double cliquez à l'intérieur d'un certain temps, puis de faire seul clic. mais cela ne semble pas fonctionner, car une fois que je démarre le timer et la minuterie est en marche, le deuxième robinet jamais génère un événement. voici mon code à l'aide d'un aync tâche, j'ai aussi essayé avec une minuterie.
mGD = new GestureDetector(getContext(), new SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent ev) {
//Log.d("KitView", "onSingleTapUp "+ev.toString());
class DblTapTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
Log.d("KitView", "onPreExecute");
}
protected Void doInBackground(Void... args) {
Log.d("KitView", "doInBackground");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
Log.d("KitView", "onPostExecute");
doSigleTapAction();
mDblTapTask=null;
}
};
if(mDblTapTask==null) {
Log.d("KitView", "START TASK");
mDblTapTask = new DblTapTask();
mDblTapTask.execute();
} else {
Log.d("KitView", "TASK RUNNING");
doDoubleTapAction();
}
Log.d("KitView", "onSingleTapUp DONE");
return true;
} //end onSingleTapUp
}); //end new GestureDetector
dans cet exemple, je reçois onSingleTapUp très bien sur la première frappe. mon délai d'attente est de 1 sec pour les essais dans le doInBackground j'ai donc beaucoup de temps à faire de la deuxième pression. note ce Journal.d("KitView", "onSingleTapUp FAIT"); exécute immédiatement, je ne le robinet d'abord, afin de onSingleTapUp n'est pas suspendu.
le problème est, en enregistrant à nouveau dans le 1sec ne fait rien. il n'y a pas d'appel à la onSingleTapUp jusqu'à ce que, après le sommeil a fini et onPostExecute a exécuter. alors connectez-vous.d("KitView", "TÂCHE en cours d'EXÉCUTION"); n'arrive jamais qui est l'endroit où je détecter double-cliquez sur vs simple clic de cours.
je ne suis pas sûr pourquoi aynctask est le blocage des événements, des idées? grâce
- essayez d'utiliser developer.android.com/reference/android/view/...
Vous devez vous connecter pour publier un commentaire.
Je suis confus sur ce que vous essayez d'atteindre. Le double tap méthode
onDoubleTap()
n'est pas appelé lorsque le robinet se produit. D'autre part, pour chaque double-tap il y a deux associés seul robinetonSingleTapUp()
les appels de méthode.Si vous voulez vous distinguer, vous pouvez utiliser
onSingleTapConfirmed()
qui est déclenché lorsque le geste détecteur est sûr que le robinet est unique. Voir la référence:Vous pouvez ensuite utiliser l'appel de cette méthode en combinaison avec un
boolean
drapeau essentiellement à détecter tout type de simple/double tap.Essayer comme ci-dessous :
Vous pouvez utiliser le GestureDetector. Voir le code suivant:
Vous pouvez remplacer les autres méthodes de l'auditeur pour obtenir des robinets simples, flinges et ainsi de suite.
je crois que j'ai compris
onSingleTapConfirmed n'est pas appelé quand je fais un double-tap, agréable et facile
vous pouvez vous référer à souffla :
remplacer le onTouchEvent() mode
dans la première vers le bas, nous allons enregistrer le temps.
lors de la seconde en bas arrive ,nous comparons les derniers temps avec elle ,si ils sont entre 150ms ou moins ,nous allons poster un msg que c'est un double-tap.