使用ImageViews和切换案例减少冗余代码



我有7个ImageView,每个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;
}

在这种情况下,您可以创建一个ImageView数组和另一个数组,并使用drawinables的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]);
}
}

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

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])
}

将所有图像以及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]);
}

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

找到它的链接

Butterknifer开源项目

最新更新