J'utilise View Pager pour glisser entre les vues de Android. Maintenant, j'ai besoin de capturer l'événement Tap pour chacune des vues. Lorsque je remplace l'auditeur tactile pour capturer l'événement Tap, l'action Swipe n'arrive pas et l'écran reste dans la première page elle-même. Comment puis-je ajouter un auditeur tactile pour voir le pager?
Code: P>
viewPager.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { mDetector.onTouchEvent(event); return true; }});
5 Réponses :
Nancy, vous n'avez pas besoin de remplacer manuellement les balayages de la page ou les événements tactiles. Il suffit d'ajouter les pages au visualpager et le visionneur s'occupera automatiquement de la glissant. P>
Faites-moi savoir votre cas d'utilisation afin que nous puissions mieux comprendre, pourquoi vous devez savoir quand une page a été cliquée! P>
J'ai besoin d'afficher une boîte d'alerte lorsque l'écran est taraudé dans la vue Pager. Comment puis-je capturer l'événement TAP dans ce cas. Mon écran est une mise en page linéaire avec une vue de liste.
Vous pouvez soit 1. Écouter les clics sur le linearlayout (contenant la listeView) en définissant l'attribut linearlayout Attribut Android: Clickable = True, puis Usin ClickListener sur IT ou 2. Écoutez un élément surEmclick sur un élément ListView, de sorte que lorsque l'article On clique dessus, il peut aller à l'OnitemClickListener goo.gl/iecij
Ici, je vous laisse un extrait de mon code pour détecter un "clic" sur l'Ontouchlistener, j'espère que cela aide
mImagePager.setOnTouchListener(new OnTouchListener() { private float pointX; private float pointY; private int tolerance = 50; @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_MOVE: return false; //This is important, if you return TRUE the action of swipe will not take place. case MotionEvent.ACTION_DOWN: pointX = event.getX(); pointY = event.getY(); break; case MotionEvent.ACTION_UP: boolean sameX = pointX + tolerance > event.getX() && pointX - tolerance < event.getX(); boolean sameY = pointY + tolerance > event.getY() && pointY - tolerance < event.getY(); if(sameX && sameY){ //The user "clicked" certain point in the screen or just returned to the same position an raised the finger } } return false; } });
Merci, et peut-être que si vous voulez ou avez besoin que vous puissiez ajouter une minuterie et s'il prend plus d'une seconde avant de libérer le contact ou quelque chose que vous pouvez décider de ne pas tirer le contact.
Quelle bonne réponse! Le mieux que je puisse trouver, et c'était beaucoup de temps à la recherche. Cela peut également être appliqué à un espace de visualisation dans une liste de visée. Il suffit d'ajouter demandeDisallInterceptouchevent (true) Après que l'ONTOUD empêche l'accès à la liste des événements Touch d'interception, puis dans l'action_upallinterceptouchevent (Faux).
Juste pour ajouter la bonne réponse de Jorge, vous pouvez simplement utiliser la distance à la place de SameX et Samey, ce qui est un peu plus élégant. Exemple:
Mettez l'événement de clic sur la vue d'élément de l'affichage à l'intérieur de la vuePagerAdapter dans la méthode instaniéstim code> similaire -
@Override
public Object instantiateItem(ViewGroup container, final int position) {
// Declare Variables
ImageView jive_image;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.list_item_viewpager, container,
false);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
// Add viewpager_item.xml to ViewPager
((ViewPager) container).addView(itemView);
return itemView;
}