2010-07-16 6 views
1

Je suis en train de programmer une application android et mon "test" est un appareil Motorola Milestone (Droid). J'ai fait une grille qui défile comme le menu d'accueil de l'iPhone (avec des "points"). J'ai deux problèmes:Finger drag sur droïde motorola

  1. La première: la traînée ne fonctionne que sur l'émulateur Android Device et ne pas sur le Droid! (Peut-être que l'écran multi-touch est un problème?)
  2. Le glisser est trop responsable, et retourner les vues parfois un par un (c'est ok) et parfois 2 par 2 ou 3 par 3! C'est clairement problématique!

Voici le code de ma méthode de OnTouch:

public boolean onTouch(View v, MotionEvent event) { 

    if (v instanceof GridView){ 
     int eventaction = event.getAction(); 
     switch (eventaction) { 
     case MotionEvent.ACTION_MOVE: 
      if (event.getEdgeFlags()==MotionEvent.EDGE_LEFT){ 
       vf2.setInAnimation(this, R.anim.slide_left); 
       vf2.setOutAnimation(this, R.anim.slide_right); 
       vf2.showNext(); 
       if (numCurrentPage==2){ 
        numCurrentPage= 0; 
       } else { 
        numCurrentPage++; 
       } 
       notifyPageNumber(numCurrentPage); 
      } 
      if (event.getEdgeFlags()==MotionEvent.EDGE_RIGHT){ 
       vf2.setInAnimation(this, R.anim.slide_in); 
       vf2.setOutAnimation(this, R.anim.slide_out); 
       vf2.showPrevious(); 
       if (numCurrentPage==0){ 
        numCurrentPage= 2; 
       } else { 
        numCurrentPage--; 
       } 
       notifyPageNumber(numCurrentPage); 
      } 
      break; 
     default: 
      break; 
     } 
    } 

    return false; 
} 

Merci pour votre aide!

Mise à jour: Cela ne fonctionne plus sur Google Nexus One!

Répondre

0

Si vous considérez que l'événement onTouch est géré, vous devez renvoyer true pour indiquer qu'il ne doit pas être propagé davantage. Si vous renvoyez false, d'autres auditeurs le recevront et pourraient faire quelque chose à ce sujet, ce qui pourrait être à l'origine de cela. Que diriez-vous d'essayer:

if (v instanceof GridView){ 
    ... 
    return true; 
} 
return false; 
+0

Merci mais ça n'a rien changé ... –

0

Ok, je réussi à avoir un bon glisser avec ceci:

public boolean onTouch(View v, MotionEvent event) { 
    if (v instanceof GridView){ 
     int eventaction = event.getAction(); 
     switch (eventaction) { 
     case MotionEvent.ACTION_DOWN: 
      xStart = event.getX(); 
      break; 
     case MotionEvent.ACTION_UP: 
      xEnd = event.getX(); 
      System.out.println("Start = "+xStart+", End = "+xEnd); 
      if (xEnd - xStart > 100){ 

       vf2.setInAnimation(this, R.anim.slide_in); 
       vf2.setOutAnimation(this, R.anim.slide_out); 
       vf2.showPrevious(); 
       if (numPageActuelle==0){ 
        numCurrentPage= 2; 
       } else { 
        numCurrentPage--; 
       } 
       notifyPageNumber(numCurrentPage); 
      } 
      if (xEnd - xStart < -100){ 
       vf2.setInAnimation(this, R.anim.slide_left); 
       vf2.setOutAnimation(this, R.anim.slide_right); 
       vf2.showNext(); 
       if (numPageActuelle==2){ 
        numCurrentPage= 0; 
       } else { 
        numCurrentPage++; 
       } 
       notifyPageNumber(numCurrentPage); 
      } 
      return true; 
     default: 
      break; 
     } 
     return true; 
    } 
    return false; 
} 

Maintenant, je reçois un autre gros problème: Je ne peux pas cliquer sur mon réseau!

Le code de ma grille est:

private ViewFlipper vf; 
...... 
vf.setOnTouchListener(this); 
GridView pageGrid = new GridView(this); 

pageGrid.setNumColumns(3); 
pageGrid.setAdapter(new ModuleAdapter(this,listPages.get(j))); 
pageGrid.setOnTouchListener(this); 

vf.addView(pageGrid); 

Je ne maintenant comment obtenir à nouveau les clics sur mon réseau ...

Si quelqu'un a une idée ...