2011-01-20 3 views
3

Je veux donner à mon application une touche agréable en permettant aux utilisateurs de faire glisser la page vers la gauche ou la droite au lieu d'utiliser simplement les boutons suivant/précédent (similaire à la maison écran).Android: Suivant/Précédent fling qui colle au doigt similaire à l'écran d'accueil

Quelle est la meilleure façon de faire cela? Je suppose que je devrais remplacer l'une des méthodes Activity.on... et que je devrais également mettre View principal de ma page dans un ViewGroup qui me permet de décaler des pages gauche et droite.

Répondre

0

Utilisez GestureDetector pour détecter si l'événement tactile est un défilement.

Si le premier événement du premier appel à onScroll est ACTION_DOWN, vous devriez voir s'il s'agit d'un défilement horizontal dominant. Si c'est le cas, votre défilement est lancé et vous devez déplacer la position absolue de la vue qui remplit la page.

Pour non dépréciée positionnement absolu, voir ma réponse ici Android: Alternative to AbsoluteLayout (I really do need absolute positioning)

Vous voulez être mises en garde du fait que vous revenez vrai consommer les événements tactiles ou non. GestureDetector ne dispose pas d'un rappel pour le défilement ayant été arrêté.

Vous devrez vérifier s'il y avait un ACTION_UP avant d'appeler GestureDetector.onTouchEvent et s'il y avait une action et que vous aviez un scroll inachevé alors vous devriez définir la position absolue à l'emplacement de destination et utiliser TranslateAnimation pour le rendre joli passer du courant à la destination.

Edit:

GestureDetector ne fonctionnait pas bien du tout si les vues de l'enfant voulait aussi répondre au toucher des événements. J'ai fini par créer une sous-classe de FrameLayout (l'une des mises en page les plus élémentaires et la chose la plus proche d'une vue parente non intrusive) et en surchargeant dispatchTouchEvent. J'ai juste pris tous les événements et fait la détection moi-même.

3

ViewFlipper est votre ami!

Ici vous pouvez voir une belle vidéo de la ViewFlipper en action et aussi un très bon tutoriel:

http://www.inter-fuser.com/2009/07/android-transistions-slide-in-and-slide.html

+0

Merci. Maintenant, je dois juste savoir comment implémenter "fling". –

+1

@George Bailey: J'ai enregistré un Touchlistener sur Viewflipper. Chaque fois qu'un événement d'atterrissage a été reçu, une heure et une position enregistrées. Lors de l'événement de retouche, j'ai comparé l'heure et la position à l'événement de retombée. Si le temps s'est écoulé et qu'il était évident que le doigt s'est déplacé respectivement à gauche et à droite, j'ai appelé le flipper pour qu'il bouge vers la gauche ou vers la droite en conséquence. – RoflcoptrException

+0

Est-il possible pour moi de voir des événements tactiles afin que je puisse faire en sorte que les vues restent collées au doigt jusqu'à ce que vous les lâchiez et que vous décidiez ensuite de revenir à l'original ou de passer à la suivante? (similaire à l'écran d'accueil) –

0

Si l'on veut faire basculer entre deux activités peut-être on peut appliquer cette transition animée:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
startActivity(intent); 
finish(); 
//transition using XML view animations 
overridePendingTransition(R.anim.slideinfromright, R.anim.slideouttoleft); 
+0

Ma situation rendrait les activités de retournement impraticables. J'ai tout ce dont j'ai besoin sauf que je ne sais pas comment détecter quand le doigt bouge. Je n'ai que des instructions pour détecter quand elle touche et quand elle cesse de se toucher. –

+1

Vérifiez si cela peut vous aider à propos de la détection des android guesture: http://android-journey.blogspot.com/2010/01/android-gestures.html – Lumis

+0

On dirait que 'onScroll' est utile, maintenant je dois juste trouver comment Définissez les coordonnées absolues d'une vue enfant. –

3

La solution est encore plus facile ces jours-ci avec la sortie du paquet de compatibilité r3. Vous pouvez télécharger ici: http://developer.android.com/sdk/compatibility-library.html

Il comprend

  • ViewPager: Un ViewGroup qui gère la mise en page pour les vues de l'enfant, que l'utilisateur peut glisser à entre.
  • PagerAdapter: un adaptateur qui remplit ViewPager avec les vues qui représentent chaque page.

et versions de fragments de ceux-ci, si vous êtes ainsi incliné.

Le code pager est compatible avec la version 4 (1.6) de l'API, et je viens de mettre en œuvre un viewPager généré dynamiquement à partir d'un ListView généré dynamiquement en environ 2 heures.Je suis un novice, donc c'est certainement le chemin préféré.

Il y a une application par exemple ici: http://geekyouup.blogspot.com/2011/07/viewpager-example-from-paug.html

0

cant nous utilisons vue Galerie ici ?? Avec l'adaptateur, toute la page peut être gonflée à l'intérieur de l'adaptateur de vue de la galerie getView() et il gérera parfaitement le défilement gauche.

Questions connexes