Как создать Фотогалерею на Android? - PullRequest
1 голос
/ 16 ноября 2010

Я хочу создать фотогалерею на Android. Я использую Gallery и BaseAdapter для создания прокручиваемой галереи. Теперь я хочу добавить действие, когда отображается изображение галереи (ширина каждого изображения равна ширине экрана), поэтому мне нужно получить его индекс в массиве изображений. У меня вопрос как получить индекс изображения , которое показывает на экране?

Я хочу получить индекс изображения, как только оно отобразится на экране, а не по событию клика. Я пытался получить текущую позицию изображения в getView(), но результат странный:

Я прокручиваю до image02, но position = 2 (должно быть 1). Когда я прокручиваю назад, позиция image02 = 0 (должна быть 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;  
    }

1 Ответ

2 голосов
/ 16 ноября 2010

Проверьте этот пример.

// 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();
  }
});
...