使用ImageViews减少冗余代码并减少案例

时间:2018-07-19 13:19:59

标签: java android

我有7个ImageView,每个开关都有7个不同的情况,它们具有为所有7个ImageView设置图像的相同行为。有什么办法可以缩短代码,现在我必须在每个ImageView的开关盒中分别按其名称来调用每个ImageView,这会使代码变得冗长而业余。就像下面的开关代码一样,所有图像视图都以其图像视图名称被调用。

 ImageView1 = (ImageView) v.findViewById(R.id.ImageView1);
 ImageView2 = (ImageView) v.findViewById(R.id.ImageView2);
 ImageView3 = (ImageView) v.findViewById(R.id.ImageView3);
 ImageView4 = (ImageView) v.findViewById(R.id.ImageView4);
 ImageView5 = (ImageView) v.findViewById(R.id.ImageView5);
 ImageView6 = (ImageView) v.findViewById(R.id.ImageView6);
 ImageView7 = (ImageView) v.findViewById(R.id.ImageView7);

switch(x){
  case1:     
  ImageView1.setImageDrawable(getResources().getDrawable(R.drawable.Image1));
  break;
  case2:
    ImageView1.setImageDrawable(getResources().getDrawable(R.drawable.Image2));
  break;
  case3:
    ImageView1.setImageDrawable(getResources().getDrawable(R.drawable.Image3));
  break;
  case4:
    ImageView1.setImageDrawable(getResources().getDrawable(R.drawable.Image4));
  break;
  case5:
    ImageView1.setImageDrawable(getResources().getDrawable(R.drawable.Image5));
  break;
  case6:
    ImageView1.setImageDrawable(getResources().getDrawable(R.drawable.Image6));
  break;
  case7:
    ImageView1.setImageDrawable(getResources().getDrawable(R.drawable.Image7));
  break;
}

4 个答案:

答案 0 :(得分:1)

在这种情况下,您可以创建一个 ImageView数组,并使用可绘制对象的 id 创建另一个。像这样:

int[] idOfDrawables= {R.drawable.image1, R.drawable.image2,...,R.drawable.image7};
ImageView[] bundleImageView= {ImageView1, ImageView2, ...,ImageView7};

之后,您可以创建一个将在其中发生逻辑的方法,如下所示:

public void setImageToImageView(ImageView[] bundleImageView, int[] idOfDrawables)
{
    for (int  i=0; i< bundleImageView.length; i++)
    {
        bundleImageView[i].setImageResource(idOfDrawables[i]);
    }
}

答案 1 :(得分:1)

按照其他人的建议,创建两个数组:

int[] ids = {R.drawable.Image1, R.drawable.Image2,...,R.drawable.Image7};
ImageView[] imageViews = {ImageView1, ImageView2, ...,ImageView7};

然后使用它:

private void showImage(int x, ImageView iv) {
    iv.setImageDrawable(getResources().getDrawable(ids[x - 1]));
}

如果您要为ImageView3放置图片,请致电showImage(x, ImageView3)
还是要显示所有图像:

for (int i = 0; i < imageViews.length; i++) {
    showImage(x, imageViews[i])
}

答案 2 :(得分:0)

将所有图像以及imageViews以彼此对应的方式放入两个单独的数组中,然后使用for循环遍历它。

findViewById...

int[] imageIds = {R.drawable.image1, R.drawable.image2,...,R.drawable.image7};
ImageView[] imageViews = {image1, image2, ...,image7};

for (int i = 0; i < imageViews.length; i++) {
    imageViews[i].setImageResource(imageIds[i]);
}

答案 3 :(得分:0)

您可以使用butterknife开源项目,该项目可帮助您减少在代码中添加findviewbyId的情况。

为其找到链接

Butterknife open source project