Android Picture Viewer - PullRequest
       28

Android Picture Viewer

1 голос
/ 26 июля 2011

У меня есть приложение, которое на данный момент представляет собой просто галерею изображений, с изображением ниже, которое показывает изображение, на которое нажал пользователь.

На данный момент я взломал этот код:

gallery.setOnItemClickListener(new OnItemClickListener() {

     ImageView iv = (ImageView)findViewById(R.id.imageView1);

     public void onItemClick(AdapterView parent, View v, int position, long id)
     {              
          switch (position){
          case 0 : iv.setImageResource(R.drawable.sample_1);break;
          case 1 : iv.setImageResource(R.drawable.sample_2);break;
          case 2 : iv.setImageResource(R.drawable.sample_3);break;
          case 3 : iv.setImageResource(R.drawable.sample_4);break;
          case 4 : iv.setImageResource(R.drawable.sample_5);break;
          case 5 : iv.setImageResource(R.drawable.sample_6);break;
          }
     }
});

Однако, если бы у меня было тысячи фотографий, я бы не хотел иметь массивного заявления о переключении, скорее что-то, где "sample _"

Как мне переписать эту функцию, чтобы она была быстрее с меньшим количеством строк кода.

Я думаю, что мне нужно получить доступ к идентификатору каждого из моих объектов ... Это возможно?

Большое спасибо

Ed

Ответы [ 4 ]

2 голосов
/ 26 июля 2011

Вы можете действовать следующим образом:

gallery.setOnItemClickListener(new OnItemClickListener() {

    ImageView iv = (ImageView)findViewById(R.id.imageView1);

    public void onItemClick(AdapterView parent, View v, int position, long id)  {           
        final String fileName = "drawablename_" + position;
        final int resId = getResources().getIdentifier(fileName, "drawable", "your.package.name");

        iv.setImageResource(resId);   
    }
});

Таким образом, это всего лишь вопрос соглашения о присвоении имен для рисования: вы называете свои drawables "drawablename_1", "drawablename_2" и т. Д. И getIdentifier() получает их R идентификаторы для вас.

1 голос
/ 26 июля 2011

Я бы переместил ваши изображения, которые вы будете использовать, в папку «Ресурсы». Вы можете загружать файлы из папки вашего ресурса, как если бы они были просто простым каталогом, включая изображения. Затем, когда вам нужно показать картинку, ваш OnClickListener будет выглядеть так:

gallery.setOnItemClickListener(new OnItemClickListener() {

     ImageView iv = (ImageView)findViewById(R.id.imageView1);

     public void onItemClick(AdapterView parent, View v, int position, long id)
     {              
          String fileName = "sample_" + (position + 1);
          InputStream in = getAssets().open(fileName);
          Bitmap bm = BitmapFactory.decodeStream(in);
          iv.setImageBitmap(bm);
     }
});

Обратите внимание, что загрузка изображения является операцией O (1).

0 голосов
/ 26 июля 2011

Более простой способ создать массив int [] picIds:

  int[] picIds=new int[]{R.drawable.sample_1,R.drawable.sample_2,R.drawable.sample_3};
0 голосов
/ 26 июля 2011

Сохраняйте массив идентификаторов, который находится в том же порядке, что и представления в галерее.

int[] picIDs = new int[10];
picIDs[0] = R.drawable.sample_1;
picIDs[1] = R.drawable.sample_2;
picIDs[2] = R.drawable.sample_3;
etc...

Затем в своем прослушивателе щелчков выполните что-то вроде этого:

 public void onItemClick(AdapterView parent, View v, int position, long id)
 {              
      iv.setImageResource(picIDs[position]);
 }
...