1

Le titre fait mon problème pas de justice, mais c'est parti. J'ai suivi un tutoriel et ajouté une action glisser à une activité dans mon application. Cette activité est maintenant imbriquée dans un TabHost. Toutefois, lorsque l'application s'exécute, l'action de balayage ne fonctionne pas à l'intérieur du TabHost, mais elle fonctionne lorsque l'activité est appelée individuellement.TabHost, glisser l'intention échoue

Si vous avez besoin du code, je l'afficherai, mais je ne le ferais pas pour des raisons professionnelles.

Répondre

2

Ok, je l'ai compris. Voici le code:

public class services extends Activity { 

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_MAX_OFF_PATH = 250; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

private GestureDetector gestureDetector; 
View.OnTouchListener gestureListener; 
private Animation slideLeftIn; 
private Animation slideLeftOut; 
private Animation slideRightIn; 
private Animation slideRightOut; 
private ViewFlipper viewFlipper; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper1); 
    slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); 
    slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); 
    slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); 
    slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 

    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       return true; 
      } 
      return false; 
     } 
    }; 
} 
class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       viewFlipper.setInAnimation(slideLeftIn); 
       viewFlipper.setOutAnimation(slideLeftOut); 
       viewFlipper.showNext(); 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       viewFlipper.setInAnimation(slideRightIn); 
       viewFlipper.setOutAnimation(slideRightOut); 
       viewFlipper.showPrevious(); 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    gestureDetector.onTouchEvent(event); 
     return true; 

} 

}

Ce qui est arrivé était dans le onTouchEvent(MotionEvent event) je devais retirer la déclaration if() et else() déclaration et tourner la déclaration gestureDetector.onTouchEvent(event); return false;-return true;

J'espère que cela aide quelqu'un d'autre . Je continue à travailler pour obtenir un mouvement fluide constant afin que les vues suivent le geste des utilisateurs.

+0

C'est génial. Merci. – Gary