2010-08-31 20 views
2

donc j'essaie de créer une interface où l'utilisateur peut faire glisser son doigt de la droite vers la gauche pour accéder à la deuxième vue, et la première vue en train d'être déplacée se déplace de droite à gauche. très similaire à un écran d'accueil de l'appareil Android, où l'utilisateur peut faire glisser un écran vers la gauche ou la droite et un autre écran émergera à partir de là. J'ai jusqu'ici un sélecteur de vue où flipper va stocker deux fichiers xml. Mais je ne sais pas comment utiliser le geste de glisser? tous les exemples seraient grandement appréciés.Comment changer 2 différentes vues en utilisant Drag Gesture dans Android?

Merci

Répondre

0

VOICI a link qui u peut trouver usefull..get revenir à moi pour toute question.

HorizontalPager pour Android HorizontalPager est une version modifiée de RealViewSwitcher de Marc Reichelt. Il s'agit essentiellement d'un ScrollView horizontal qui s'aligne sur un enfant de pleine largeur (comme le comportement de commutation de l'écran d'accueil Android). Cette modification version prend en charge le défilement vertical enfants

+2

@ user651377 S'il vous plaît ajouter un peu de contexte sur le lien afin qu'il ne ressemble pas à du spam, et dans le cas où la page liée tombe en panne. –

+0

@Blowski, bonne idée. J'ai pris la liberté et ajouté un peu de contexte en tant qu'exemple au nouvel utilisateur. –

+0

@John K: merci l'homme – user651377

0

Je viens d'écrire un exemple intégrer l'effet de mouvement de glissement et le commutateur d'image. J'espère que cela aide.

Toutes les ressources nécessaires et le code comme suit:

  1. mise en page principale: ajouter un ImageSwitcher dans la mise en page

  2. deux drawable nommé R.drawable.s3, R.drawable.s4

  3. deux fichiers d'animation, slide_right_in, slide_left_out

    public class PureTestActivity extends Activity{ 
         final String TAG = PureTestActivity.class.getSimpleName(); 
         /** Called when the activity is first created. */ 
    
         LinearLayout mainLL; 
         GestureDetector gestureDetector; 
         ImageSwitcher vs; 
         int imageIdx = 0; 
         int[] imageResId = {R.drawable.s3, R.drawable.s4}; 
         @Override 
         public void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); 
          setContentView(R.layout.main); 
    
    
          mainLL = (LinearLayout)findViewById(R.id.main); 
    
          vs = (ImageSwitcher)findViewById(R.id.viewSwitcher1); 
          vs.setFactory(new ViewFactory(){ 
    
         @Override 
         public View makeView() { 
    
           ImageView i = new ImageView(PureTestActivity.this); 
           i.setBackgroundColor(0xFF000000); 
           i.setImageResource(R.drawable.s3); 
           i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
           i.setLayoutParams(new ImageSwitcher.LayoutParams(
           LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
           return i; 
         } 
        }); 
    
    
        vs.setInAnimation(AnimationUtils.loadAnimation(this, 
          android.R.anim.fade_in)); 
        vs.setOutAnimation(AnimationUtils.loadAnimation(this, 
          android.R.anim.fade_out)); 
        //start for touch events Gesture detection 
        gestureDetector = new GestureDetector(new MyGestureDetector()); 
        View.OnTouchListener gestureListener = new View.OnTouchListener() { 
         public boolean onTouch(View v, MotionEvent event) { 
    
          Log.d(TAG, "ontouch event."); 
          if (gestureDetector.onTouchEvent(event)) { 
           return true; 
          } 
          return false; 
         } 
        }; 
        vs.setOnTouchListener(gestureListener); 
    }  
        class MyGestureDetector extends SimpleOnGestureListener { 
    
         final String TAG = MyGestureDetector.class.getSimpleName(); 
    
         // for touch left or touch right events 
         private static final int SWIPE_MIN_DISTANCE = 60; //default is 120 
         private static final int SWIPE_MAX_OFF_PATH = 250; 
         private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    
         @Override 
         public boolean onDown(MotionEvent e) { 
    
          Log.d(TAG, " on down events :" + e.getAction()); 
          return true; 
         } 
    
         @Override 
         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    
          Log.d(TAG, " on filing event, first velocityX :" + velocityX + 
            " second velocityY" + 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) { 
             onHorizonTouch(true); // left 
    
           } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
             onHorizonTouch(false); // right 
    
           } 
          } catch (Exception e) { 
           // nothing 
          } 
          return false; 
         } 
    
         void onHorizonTouch(Boolean toLeft){ 
          if(toLeft && imageIdx>0) 
          { 
           vs.setInAnimation(AnimationUtils.loadAnimation(
             getApplicationContext(), R.anim.slide_right_in)); 
           // 设置切出动画 
           vs.setOutAnimation(AnimationUtils.loadAnimation(
             getApplicationContext(), R.anim.slide_left_out)); 
           PureTestActivity.this.vs.setImageResource(imageResId[--imageIdx]); 
          } 
          if(!toLeft && imageIdx<1) 
          { 
           vs.setInAnimation(AnimationUtils.loadAnimation(PureTestActivity.this, 
             android.R.anim.slide_in_left)); 
           vs.setOutAnimation(AnimationUtils.loadAnimation(PureTestActivity.this, 
             android.R.anim.slide_out_right)); 
           PureTestActivity.this.vs.setImageResource(imageResId[++imageIdx]); 
          } 
    
         }; 
        } 
    

    }