Android débutant: comprendre les actions de MotionEvent
Je vais avoir du mal à obtenir mon activité pour générer un MotionEvent.ACTION_UP. Probablement une erreur de débutant.
Dans le LogCat, je ne vois que le ACTION_MOVE événement (qui est un int valeur de 3). Je vois aussi le X/Y de coordonnées. Pas de ACTION_DOWN et pas de ACTION_UP.
J'ai cherché partout pour trouver une solution. J'ai trouvé une question sur un forum qui semble être le même que celui de mon problème, mais aucune solution n'est proposée:
http://groups.google.com/group/android-developers/browse_thread/thread/9a9c23e40f02c134/bf12b89561f204ad?lnk=gst&q=ACTION_UP#bf12b89561f204ad
Voici mon code:
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.webkit.WebView;
public class Brand extends Activity {
public WebView webview;
public float currentXPosition;
public float currentYPosition;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webview = new WebView(this);
setContentView(webview);
webview.loadUrl("file:///android_asset/Brand.html");
}
@Override
public boolean onTouchEvent(MotionEvent me) {
int action = me.getAction();
currentXPosition = me.getX();
currentYPosition = me.getY();
Log.v("MotionEvent", "Action = " + action);
Log.v("MotionEvent", "X = " + currentXPosition + "Y = " + currentYPosition);
if (action == MotionEvent.ACTION_MOVE) {
//do something
}
if (action == MotionEvent.ACTION_UP) {
//do something
}
return true;
}
}
source d'informationauteur Dave
Vous devez vous connecter pour publier un commentaire.
Votre problème est que vous faites cela dans une WebView. WebViews ont intégré dans le contrôle tactile pour permettre à l'utilisateur de faire défiler la page vers, et qui doit être interférer avec vous la réception de la MotionEvents. Il semblerait que vous aurez besoin d'utiliser un point de Vue différent. Par exemple, j'ai juste couru votre code suivant substitution:
au lieu de
et tout le reste fonctionne. Remarque: j'ai utilisé un TextView que le point de vue juste pour des raisons de simplicité. Cela fonctionne sur ViewGroups comme LinearLayouts, RelativeLayouts, les Vues personnalisées avec des toiles etc. Il semble juste que les WebViews sont spéciales. (J'ai aussi été le fait de ne recevoir ACTION_MOVE lors de l'utilisation de la WebView.) Donc, j'espère que vous pouvez vous en sortir avec l'aide d'autre chose que d'une WebView!
Vous devez d'abord suivre les Webview tutoriel de laisser un WebViewClient au lieu de la valeur par défaut du navigateur de faire le travail. Sans que, une fois que vous chargez une page web, vous n'obtiendrez pas un événement.
En supposant que vous souhaitez pour gérer les événements dans votre acrtivity vous pouvez ajouter la méthode dispatchTouchEvent:
Vous permettra de voir les autres événements tactiles. Vous devez les traiter dans cette méthode.
Une alternative approuch est d'enregistrer un EventListener. Votre classe deviendrait:
dans onCreate() ce faire:
un complément à l'Activité:
}
De mes logs j'ai ensuite le suivant:
En outre, onTouch() les rapports relatifs à la Vue, dispatchTouchEvent() rapports de valeurs par rapport à l'Affichage.
Pourquoi ne onTouchEvent pas signaler ces Événements? Comme beaucoup de ces méthodes, il y a deux incarnations de onTouchEvent().
Si vous remplacez onTouchEvent() dans votre Activité, il sert comme un "fourre tout" - il ne gère que les événements qui n'ont pas été consommés par les points de Vue, par exemple, si vous appuyez en dehors de tout point de Vue, ou les événements de ces Vues passer. Si vous remplacez onTouchEvent() de votre point de Vue, il est supposé gérer les événements de ce point de Vue. Parfois, il est facile de confondre les deux.