Android图片查看器

时间:2011-07-26 14:53:08

标签: android gallery imageview

我有一个应用程序,目前只是一个图片库,下面有一个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 ..这可能吗?

非常感谢

4 个答案:

答案 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};