zippeurfou Posté(e) 30 juillet 2010 Share Posté(e) 30 juillet 2010 Salut, Je cherche desesperement à reproduire ce que fait le widget du nexus one pour voir les news et la méteo. C'est à dire voir une liste d'onglet et pouvoir naviguer entre eux avec un drag sur l'ecran. Malheureusement, le code source est privé et je n'arrive pas à le faire avec des tabWidget. Aucune idée ? :) Merci d'avance. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Infernus Posté(e) 30 juillet 2010 Share Posté(e) 30 juillet 2010 Utiliser un viewflip ? Premier truc qui me viens à l'esprit. Et sur le dessus faire une listeview de bouton. :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
akex Posté(e) 30 juillet 2010 Share Posté(e) 30 juillet 2010 Le ViewFlipper serait adapté en effet :). Et tu actives l'animation lorsque tu fais un fling avec ton doigt. Y a un exemple de ViewFlipper dans les api google (dans animation je crois, de tête) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alocaly Posté(e) 30 juillet 2010 Share Posté(e) 30 juillet 2010 Non, ce n'est pas un view Flipper, car un view flipper ne suit pas le mouvement du doigt : il se déclenche ( et switch de view avec une animation ) ou ne se déclenche pas, mais on ne controle pas le niveau avec le doigt. Je suis sur qu'on en a deja parlé sur ce forum, je pense qu'en passant du temps à rechecher, tu pourrais retrouver le sujet qui en parle. Dans mon souvenir, il y avait un lien vers des sources d'une solution à ce probleme. Emmanuel / Alocaly Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alocaly Posté(e) 30 juillet 2010 Share Posté(e) 30 juillet 2010 J'ai retrouvé le sujet : https://forum.frandroid.com/forum/viewtopic.php?id=10991 Emmanuel / Alocaly Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
zippeurfou Posté(e) 31 juillet 2010 Auteur Share Posté(e) 31 juillet 2010 Merci beaucoup ! Le code ici: http://www.zumodrive.com/files?key=5SBbYzk0Mj#item=170533463 correspond à ce que je cherche même si les view doivent etre dynamique il me semble apres. Merci beaucoup encore cela m'aide grandement. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
zippeurfou Posté(e) 2 août 2010 Auteur Share Posté(e) 2 août 2010 (modifié) Non, ce n'est pas un view Flipper, car un view flipper ne suit pas le mouvement du doigt : il se déclenche ( et switch de view avec une animation ) ou ne se déclenche pas, mais on ne controle pas le niveau avec le doigt.Je suis sur qu'on en a deja parlé sur ce forum, je pense qu'en passant du temps à rechecher, tu pourrais retrouver le sujet qui en parle. Dans mon souvenir, il y avait un lien vers des sources d'une solution à ce probleme. Emmanuel / Alocaly Salut, J'ai lu le code que tu m'a proposer. Il est bien mais semble à mon avis peut facile a l'utilisation. J'ai donc regarder les viewFlipper. On peut trouver un bon example ici :http://android-journey.blogspot.com/2009/12/android-viewflipper-and-slidingdrawer.html Par contre, on peut utiliser l'action MotionEvent.ACTION_MOVE mais je n'arrive pas à faire quelquechose de concluant. Je souhaiterai que si jamais mon mouvement est inférieur à 150 alors je lance une animation pour revenir a l'etat initial. De plus lorsque je drague, le layout d'a coté n'apparait pas... Toute aide serait grandement apprecié ! Voici la partie du code interessant: case MotionEvent.ACTION_MOVE: { //TODO FIX THAT final View currentView = vf.getCurrentView(); int position=(int) (touchevent.getX() - oldTouchValue); currentView.layout(position, currentView.getTop(), currentView.getRight(), currentView.getBottom()); //Try to get the next one (debugging only will crash on the last screen nullpointer) and move it in the same time of the other one vf.getChildAt(vf.getDisplayedChild() +1).layout(currentView.getLeft(), currentView.getTop(), position, currentView.getBottom()); //TODO get the new position and see if it's more or less than 150 from the old one. If it's less, go back to the original state with an animation... break; } Voici le reste du code pour les curieux: public class Main extends Activity { /** Called when the activity is first created. */ private ViewFlipper vf; private float oldTouchValue; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); vf = (ViewFlipper) findViewById(R.id.layoutswitcher); } //for the previous movement public static Animation inFromRightAnimation() { Animation inFromRight = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, +1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f ); inFromRight.setDuration(350); inFromRight.setInterpolator(new AccelerateInterpolator()); return inFromRight; } public static Animation outToLeftAnimation() { Animation outtoLeft = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f ); outtoLeft.setDuration(350); outtoLeft.setInterpolator(new AccelerateInterpolator()); return outtoLeft; } // for the next movement public static Animation inFromLeftAnimation() { Animation inFromLeft = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f ); inFromLeft.setDuration(350); inFromLeft.setInterpolator(new AccelerateInterpolator()); return inFromLeft; } public static Animation outToRightAnimation() { Animation outtoRight = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, +1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f ); outtoRight.setDuration(350); outtoRight.setInterpolator(new AccelerateInterpolator()); return outtoRight; } @Override public boolean onTouchEvent(MotionEvent touchevent) { switch (touchevent.getAction()) { case MotionEvent.ACTION_DOWN: { oldTouchValue = touchevent.getX(); break; } case MotionEvent.ACTION_UP: { // if(this.s==false) return false; float currentX = touchevent.getX(); System.out.println("oldTouchValue "+oldTouchValue+"currentX "+currentX); if (oldTouchValue+150 < currentX) { vf.setInAnimation(inFromLeftAnimation()); vf.setOutAnimation(outToRightAnimation()); vf.showNext(); } if (oldTouchValue > currentX+150) { vf.setInAnimation(inFromRightAnimation()); vf.setOutAnimation(outToLeftAnimation()); vf.showPrevious(); } break; } case MotionEvent.ACTION_MOVE: { final View currentView = vf.getCurrentView(); int position=(int) (touchevent.getX() - oldTouchValue); currentView.layout(position, currentView.getTop(), currentView.getRight(), currentView.getBottom()); vf.getChildAt(vf.getDisplayedChild() +1).layout(currentView.getLeft(), currentView.getTop(), position, currentView.getBottom()); break; } } return false; } } Modifié 2 août 2010 par zippeurfou Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
eephyne Posté(e) 19 août 2010 Share Posté(e) 19 août 2010 j'essaye également de faire ça en ce moment , j'ai un peu fait avancé le shmilblick (je pense) if ((touchEvent.getX() - mOldTouchValue) > 0) { // place this view just left of the currentView leftView.layout(currentView.getLeft() - mViewFlipper.getWidth(), leftView.getTop(), currentView.getLeft(), leftView.getBottom()); leftView.setVisibility(View.VISIBLE); rightView.setVisibility(View.INVISIBLE); } else { // place this view just right of the currentView rightView.layout(currentView.getRight(), rightView.getTop(), currentView.getRight() + mViewFlipper.getWidth(), rightView.getBottom()); rightView.setVisibility(View.VISIBLE); leftView.setVisibility(View.INVISIBLE); } situé dans MotionEvent.MOVE , ça permet de voir la view d'a coté Le souci maintenant c'est que lorsque qu'on lache , le slide reprend du début et non de la ou il s'est arrété durant le MOVE , donc c'est très moche Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
eric.taix Posté(e) 19 août 2010 Share Posté(e) 19 août 2010 Bonjour à tous, Je viens de poster la réponse (code source + exemple) ici: https://forum.frandroid.com/forum/viewtopic.php?pid=339660#p339660 Et n'hésitez pas à me donner vos impressions et remarques sur le topic en question. Eric Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
akex Posté(e) 19 août 2010 Share Posté(e) 19 août 2010 Pour le tabhost qui scrolle, j'avais mis le lien ici : https://forum.frandroid.com/forum/viewtopic.php?id=22352 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.