Здравствуйте. Помогите разобраться в чем может быть проблема. Написал вот такой код и в нем есть описание действий:
int countPosition = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
GridLayout.Spec buttonRowSpec = GridLayout.spec(i);
GridLayout.Spec buttonSpecColumn = GridLayout.spec(j);
TouchAction actionListener = new TouchAction(gridLayout, buttons, gameController);
ImageButton button = ButtonsFactory.createImageButton(this, bitmaps[i][j], countPosition, paddingImgBtn, actionListener);
countPosition++;
if (countPosition < 12)
buttons.add(button); // добавляем кажду кнопку в коллекцию
// добавляем каждую кнопку в GridLayout с указанными параметрами
gridLayout.addView(button, new GridLayout.LayoutParams(buttonRowSpec, buttonSpecColumn));
}
}
gridLayout.removeAllViewsInLayout(); // удаляем кнопки из GridLayout
Collections.shuffle(buttons); // перемешиваем коллекцию с кнопками
Bitmap lastImageBitmap = ImageProcessor.resizeImage(getResources(), R.drawable.locked,
bitmaps[0][0].getWidth(), bitmaps[0][0].getHeight(), true);
lastButton.setImageBitmap(lastImageBitmap);
buttons.add(lastButton); // добавляем кнопку с картинкой замочка в самый конец коллекции
for (int i = 0; i < 12; i++) {
ImageButton button = buttons.get(i); // получаем кнопки из перемешанной коллекции
gridLayout.addView(button); // добавляем их в GridLayout
}
// делаем валидацию что бы отобразилось корректно, но что то подсказывает мне, что этот метод тут не для этого!
// в SWING есть у JPanel такой метод как validate(), решил, что и тут так же, но увы видимо нет
gridLayout.invalidate();
Картинка на выходе не та, что ожидалась по логике, кнопки должны были перемешаться:
Ответ
Оказывается, что позиции кнопок в GridLayout устанавливаются когда они создаются, их позиции в листе не влияют на макет layout.
Поэтому нам нужно будет создать еще одну коллекцию с параметризованым типом: List
И только потом уже можно применять Collections.shuffle(params);
А метод gridLayout.invalidate() тут точно не нужен.
Комментариев нет:
Отправить комментарий