2010-11-30 13 views

Respuesta

27

simplemente anular la Galería onFling() método del widget y no llame al método de la superclase onFling().

Esto hará que el galería de antemano un elemento por golpe.

+0

¡Excelente! Exactamente lo que estaba buscando. –

+0

que parece lo suficientemente simple. ¿Cómo funciona? – njzk2

+0

Para ser precisos, debe devolver falso en el método reemplazado. –

7

Tengo una solución, que, aunque no garantiza como máximo un avance, es extremadamente simple (y probablemente hace lo que haría manualmente en el código): simplemente disminuya la velocidad-x en el parámetro onFling. Es decir, anular el onFling simplemente tener este aspecto:

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

mejor,

Michael

+0

Esta es una buena, que puede reducir su velocidad con un poco de animación: D ¿Te gusta/2,/3 –

20

que tenía el mismo requisito y acabo de descubrir que se deslizará un solo elemento por aventura si Voy a regresar falso.

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

ejemplo de código para responder a la pregunta: ¿

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

Creo que debe ser: else if (velocityX <-1200.0f) –

+0

que acaba de guardar mi día !!!! ¡Un millón de gracias! – TharakaNirmana

+0

Gracias Marco, He actualizado el código –

3

Hola enfrentó mismo problema, he resuelto problema mediante el siguiente lógica.

1-> Crear Una clase de esa clase Debería extender la Galería
2-> y Anular el método de Vuelo.

véase a continuación Código:

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; 
    } 

} 

uso esta clase en XML como una galería:


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

lo usé. Esta funcionando. ¿Ahora cómo puedo hacer que sea una galería interminable? Quiero decir ... primera imagen después de la última imagen ... –

Cuestiones relacionadas