Получить идентификатор ресурса из нескольких представлений изображений и назначить им возможность рисования

#android #hashmap #imageview #drawable #grid-layout

#Android #hashmap #просмотр изображений #возможность рисования #сетка-макет

Вопрос:

В моем приложении есть GridLayout и 60 просмотров изображений. Я хочу назначить возможность рисования для 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 — идентификатор для первого просмотра изображений.
и установите drawable для ячеек с помощью этого метода:

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

}
  

код выполняется без проблем, но если есть какой-либо более простой способ получения идентификатора или тега imageviews из макета сетки вместо 60 строк кода?

Ответ №1:

Зачем просто id, когда вы можете получить ImageView непосредственно из GridLayout. 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);
    }    
}