2010-11-30 13 views

Répondre

27

remplacer simplement la Galerie Méthode onFling() du widget et n'appelez pas la méthode de la superclasse onFling().

Cela fera avancer la galerie d'un élément par balayage.

+0

Excellent! Exactement ce que je cherchais. –

+0

cela semble assez simple. Comment ça marche même? – njzk2

+0

Pour être précis, vous devez retourner false sur la méthode surchargée. –

7

J'ai une solution qui, bien qu'elle ne garantisse pas au plus une avance, est extrêmement simple (et probablement ce que vous feriez manuellement en code): il suffit de diminuer la vitesse x dans le paramètre onFling. Cela est, remplacer le onFling regarder simplement comme ceci:

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    return super.onFling(e1, e2, velocityX/4, velocityY); 
} 

Best,

Michael

+0

Ceci est un bon, vous pouvez réduire sa vitesse avec une animation: D like/2,/3 –

20

J'ai eu la même exigence et je viens de découvrir qu'il glissera un seul élément par Fling si je Je reviens juste faux.

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
         float velocityY) {   
    return false; 
} 
12

exemple de code pour répondre à la question:

public class SlowGallery extends Gallery 
{ 


    public SlowGallery(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
    } 

    public SlowGallery(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    public SlowGallery(Context context) 
    { 
     super(context); 
    } 


    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
    { 

     //limit the max speed in either direction 
     if (velocityX > 1200.0f) 
     { 
      velocityX = 1200.0f; 
     } 
     else if(velocityX < -1200.0f) 
     { 
      velocityX = -1200.0f; 
     } 

     return super.onFling(e1, e2, velocityX, velocityY); 
    } 

} 
+2

Je pense qu'il devrait être: else if (velocityX <-1200.0f) –

+0

Vous venez de sauver ma journée !!!! Merci un million! – TharakaNirmana

+0

Merci Marco, j'ai mis à jour le code –

3

Salut face même problème, je résolu problème en utilisant la logique ci-dessous.

1-> Créer Une classe de cette classe Devrait étendre la galerie
2-> et Remplacer la méthode onFling.

voir ci-dessous le code:

package com.sra; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.Gallery; 

public class GallView extends Gallery{ 
public GallView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
    } 

public GallView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 


    public GallView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 


    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
          float velocityY) {   
     return false; 
    } 

} 

utiliser cette classe dans xml comme galerie:


<com.sra.GallView 
       android:id="@+id/Gallery01" 
       android:layout_width="fill_parent" 
       android:layout_height="250dip" > 
      </com.sra.GallView> 
+0

Je l'ai utilisé. Ça marche. Maintenant, comment puis-je en faire une galerie sans fin? Je veux dire ... la première image après la dernière image .... –