2010-11-16 6 views
1

Je veux créer une galerie photo sur Android. J'utilise Gallery et BaseAdapter pour créer une galerie déroulante. Maintenant je veux ajouter une action quand une image de la galerie est montrée (la largeur de chaque image est la même que la largeur d'écran), ainsi j'ai besoin d'obtenir son index dans le tableau d'image. Ma question est comment obtenir l'index de l'image qui montre sur l'écran?Comment créer une galerie de photos sur Android?

Je veux obtenir l'index de l'image dès qu'il apparaît sur l'écran, pas sur l'événement click. J'ai essayé d'obtenir la position actuelle de l'image dans getView(), mais le résultat est étrange:

Je fais défiler jusqu'à l'image02 mais la position = 2 (devrait être 1). Quand je reviens en arrière, la position de l'image02 = 0 (devrait être 1).

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);  

     Gallery g = (Gallery) this.findViewById(R.id.Gallery); 
     g.setAdapter(new ImageAdapter(this)); 
} 

public class ImageAdapter extends BaseAdapter { 

    private Context mContext; 
    private Integer[] mImageIds = { 
      //each image's size is 320x60 
      R.drawable.btm01, 
      R.drawable.btm02, 
      R.drawable.btm03 
    }; 
    public ImageAdapter(Context c){ 
     this.mContext = c; 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return mImageIds.length; 
    } 
    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ImageView imageView = new ImageView(mContext); 
     imageView.setImageResource(mImageIds[position]); 
     imageView.setLayoutParams(new Gallery.LayoutParams(320,60));  
     return imageView; 
    } 

Répondre

2

Vérifiez l'exemple this.

// Reference the Gallery view 
Gallery g = (Gallery) this.findViewById(R.id.Gallery); 
// Set the adapter to our custom adapter (below) 
g.setAdapter(new ImageAdapter(this)); 

// Set a item click listener, and just Toast the clicked position 
g.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView parent, View v, int position, long id) { 
    Toast.makeText(Gallery1.this, "" + position, Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

Je veux obtenir l'index de l'image dès qu'il apparaît, pas sur l'événement click. Est-ce possible? –

+0

Je pense que l'index devrait être renvoyé à partir de quelque chose comme un événement onScroll. Mais je ne trouve aucune fonction à utiliser. –

+0

@iPhoney: Qu'est-ce que vous avez besoin de cela? Cela n'a aucun sens pour moi mais vous pouvez utiliser 'position' dans la méthode' getView() '. – Macarse

Questions connexes