Android Picture Viewer
У меня есть приложение, которое на данный момент представляет собой просто галерею изображений, с изображением ниже, которое показывает изображение, на которое нажал пользователь.
На данный момент я взломал этот код:
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_"
Как я могу переписать эту функцию, чтобы быть быстрее с меньшим количеством строк кода.
Я думаю, что мне нужно получить доступ к идентификатору каждого из моих drawables.. это возможно?
Большое спасибо
издание
4 ответа
Вы можете действовать следующим образом:
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);
}
});
Таким образом, это всего лишь вопрос соглашения о присвоении имен для рисования: вы называете свои списки рисования "drawablename_1", "drawablename_2" и т. Д.... и getIdentifier()
восстанавливает их R
идентификаторы для вас.
Я бы переместил ваши изображения, которые вы будете использовать, в вашу папку "Ресурсы". Вы можете загружать файлы из папки вашего ресурса, как если бы они были просто простым каталогом, включая изображения. Затем, когда вам нужно показать картинку, ваш 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).
Сохраняйте массив идентификаторов в том же порядке, что и представления в галерее.
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]);
}
Более простой способ создать массив int[] picIds:
int[] picIds=new int[]{R.drawable.sample_1,R.drawable.sample_2,R.drawable.sample_3};