从多个ImageView获取资源ID并为它们分配可绘制对象

时间:2020-10-26 02:03:23

标签: android hashmap imageview drawable grid-layout

我的应用程序具有GridLayout和60个ImageViews。我想将可绘制对象分配给25个网格布局的单元格。为此,我有一个包含25个随机数的数组。
然后我定义了一个哈希图,每个项都是图像视图之一:


private  HashMap<Integer, Integer> imageViews = new HashMap<>();
imageViews.put(0, R.id.imageView1);
.
.
.
imageViews.put(59, R.id.imageView60);

并将60个imgageviews放入hashmap中... 0是第一个imageview的id。 并使用此方法将可绘制设置为单元格:

    private void setBombDrawable(){
    HashMap<Integer, Integer> map = mImageViewsMap.getImageViews();
    for (int tag : randomBombArray) {
        int id = map.get(tag);
        ImageView imageView = findViewById(id);
        imageView.setImageResource(R.drawable.exploded);
    }

}

代码运行没有问题,但是是否有更简单的方法从网格布局而不是60行代码中获取imageviews id或标签?

1 个答案:

答案 0 :(得分:1)

为什么直接从GridLayout获取ImageView时为什么只是id。 GridLayout是一个ViewGroup,因此您可以循环浏览其所有子视图。

private Map<Integer, ImageView> imageViews = new HashMap<>();
int childCount = gridLayout.getChildCount();
for (int i = 0; i < childCount; i++) {
    View v = gridLayout.getChildAt(i);
    if (v instanceof ImageView) {
         map.put(i, (ImageView) v);
    }    
}