J'ai une galerie avec plusieurs images en plein écran. Je veux limiter le geste de lancer pour n'avancer qu'une seule image à la fois (comme l'application HTC Gallery). Quel est le bon/le moyen le plus facile d'y parvenir?Comment puis-je limiter le fling dans la galerie Android à un seul article par fling?
Répondre
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.
Excellent! Exactement ce que je cherchais. –
cela semble assez simple. Comment ça marche même? – njzk2
Pour être précis, vous devez retourner false sur la méthode surchargée. –
Je ne pouvais pas trouver un moyen de limiter le défilement, mais je résolu la question mise en œuvre/adapter avec succès ce code: http://permalink.gmane.org/gmane.comp.handhelds.android.devel/101327
il met en œuvre une galerie avec « passade »
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
Ceci est un bon, vous pouvez réduire sa vitesse avec une animation: D like/2,/3 –
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;
}
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);
}
}
Je pense qu'il devrait être: else if (velocityX <-1200.0f) –
Vous venez de sauver ma journée !!!! Merci un million! – TharakaNirmana
Merci Marco, j'ai mis à jour le code –
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>
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 .... –
Voici une autre réponse possible! http://stackoverflow.com/questions/2373617/how-to-stop-scrolling-in-a-gallery-widget?lq=1 – Lunf