2010-09-01 7 views
3

J'ai une galerie (images) dans un RelativeLayout et si les utilisateurs cliquent dessus, trois Buttons et un TextView apparaissent. Je l'ai fait avec la propriété visible, cela signifie que les trois Buttons et TextView sont déclarés comme invisibles dans le fichier xml et plus tard le onClick() du Gallery le rend visible avec setVisibility(0). Cela fonctionne très bien, mais je veux que le Gallery s'arrête défilement pendant le Buttons et le TextView sont en face.comment arrêter la galerie de défilement?

Y at-il un moyen de le faire?

+2

Je ne pense pas que '[arrêter]' est un très descriptif marque. – Zaz

+0

Salut Josh, merci pour votre réponse. Peut-être qu'il y a un moyen avec onFling()? mais que signifient les paramètres 'MotionEvent' et' velocityX '? – androidfan76

Répondre

5

Si vous voulez être en mesure d'activer/désactiver le défilement de la galerie, vous pouvez utiliser la classe comme ceci:

public class ExtendedGallery extends Gallery { 

    private boolean stuck = false; 

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

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

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

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    return stuck || super.onTouchEvent(event); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_DPAD_LEFT: 
    case KeyEvent.KEYCODE_DPAD_RIGHT: 
     return stuck || super.onKeyDown(keyCode, event); 
    } 
    return super.onKeyDown(keyCode, event); 
    } 

    public void setScrollingEnabled(boolean enabled) { 
    stuck = !enabled; 
    } 

} 

Selon le code source de la galerie, il existe deux types d'événements qui commencent le défilement: touche d'écran et la touche, appuyée sur le D-pad. Vous pouvez donc intercepter ces événements si vous souhaitez désactiver le défilement. Ensuite, utilisez quelque chose comme ceci dans votre mise en page:

<your.package.name.ExtendedGallery 
    android:id="@+id/gallery" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

Ensuite, vous pouvez activer/désactiver le défilement de cette galerie à tout moment:

ExtendedGallery mGallery = (ExtendedGallery) findViewById(R.id.gallery); 
mGallery.setScrollingEnabled(false); // disable scrolling 
+0

Excellent .. Merci! –

+0

Cela désactive également itemClickListener pour les éléments à l'intérieur de l'adaptateur de la galerie. –

Questions connexes