我有一个应用程序,目前只是一个图片库,下面有一个ImageView,显示用户点击的图片。
目前我已将这段代码整合在一起:
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的id ..这可能吗?
非常感谢
版
答案 0 :(得分:2)
您可以按以下步骤操作:
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
ID。
答案 1 :(得分:1)
我会将您将使用的图像移动到Assets文件夹中。您可以从资产文件夹加载文件,就好像它们只是一个简单的目录,包括图片。然后,当您需要显示图片时,您的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)操作。
答案 2 :(得分:0)
保留一系列ID,其顺序与图库中的视图相同
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]);
}
答案 3 :(得分:-1)
创建int [] picIds数组的更简单方法是:
int[] picIds=new int[]{R.drawable.sample_1,R.drawable.sample_2,R.drawable.sample_3};