2011-09-23 3 views
4

Par défaut, il semble que lorsqu'un objet de la galerie est cliqué, la galerie défile automatiquement pour centrer l'élément sur lequel vous avez cliqué. Comment puis-je remplacer ce comportement? Je ne veux pas que la galerie défile au centre lorsque je clique dessus, je veux qu'elle reste là où elle est.android gallery pas de défilement Cliquez sur

Répondre

8

Je pense que cela est une bonne solution:

@Override 
public boolean onSingleTapUp(final MotionEvent e) {  
    boolean handled = super.onSingleTapUp(e); 
    onDown(e); 

    return handled; 
} 
+0

J'ai finalement retesté cela. Cela fonctionne très bien, merci d'avoir renoncé à ce plaisir que j'ai vérifié. – drod

+0

ça marche vraiment !! – androidGuy

0

La galerie a une méthode pour l'ignorer.

gallery.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView parent, View v, int position, long id) { 
     Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show(); 
    } 
}); 

}

+0

Comment est-ce que cela répond à la question? – Noel

+0

Alors qu'est-ce que je devrais faire dans onItemClick pour garder le défilement par défaut au centre de se produire? merci – drod

0

Je ne l'ai pas essayé ... mais vous pouvez essayer ce qui suit:

Dans le onItemClickListener.onItemClick(), déterminer la position sélectionnée à l'aide Gallery.getSelectedItemPosition() puis définir la position à l'aide Gallery.setSelection(int position) . Je ne sais pas si cela marchera ou non, mais vous pouvez essayer. Il est également possible d'utiliser le OnItemSelectedListener.

1

Je ne ai jamais utilisé une galerie avant (en fait, je devais regarder une vue sur youtube pour voir son effet visuel d'abord ;-)

Alors je fouillai dans le code source de la galerie et il me semble qu'ils ont attaché la sélection est assez lourde pour le positionnement, donc vous devrez passer outre la classe et faire du code lourd, peut-être même de la réflexion, pour atteindre votre objectif. Je ne peux même pas dire si tu réussirais.

Ce n'est pas une solution, mais un soupçon ce que vous devriez vous attendre si vous voulez réaliser que ;-)

+0

Je reviens juste à ça. d'après ce que je peux trouver, ce que vous avez dit est correct. Je vais devoir essayer de copier le code source de la galerie et l'implémenter comme ma propre classe de galerie. Si quelqu'un a une lecture recommandée sur ce sujet ce serait génial. Merci. – drod

2

Je pense que c'est ce que vous recherchez.

d'abord créer une classe qui étend de la galerie, puis passer outre la méthode onSingleTapUp:

@Override 
public boolean onSingleTapUp(final MotionEvent e) { 
    final OnItemClickListener listener = getOnItemClickListener(); 
    final View selectedView = getSelectedView(); 

    final float tapX = e.getRawX(); 
    final float tapY = e.getRawY(); 

    if ((selectedView != null) && (listener != null) 
      && (tapX >= selectedView.getLeft()) && (tapX <= selectedView.getRight()) 
      && (tapY >= selectedView.getTop()) && (tapY <= selectedView.getBottom())) { 

     final int selectedPosition = getSelectedItemPosition(); 

     listener.onItemClick(this, selectedView, selectedPosition, selectedPosition); 
    } 

    return true; 
} 
+0

On dirait ce que j'étais lookim – drod

+0

Je vais tester et mettre à jour. Merci – drod

0

Malheureusement, je ne semble pas avoir la possibilité de commenter les posts des autres, mais pour ceux qui ont trouvé cette question mais qui avaient des problèmes, notez que si vous créez une galerie personnalisée qui remplace la méthode onSingleTap (comme suggéré par Ohgema), vous besoin de remplacer le constructor that takes a Context and an AttributeSet.

Questions connexes