#java #android #xml
#java #Android #xml
Вопрос:
Я создаю сетку в действии Android из 9 плиток по 14 плиток, каждая из которых представляет собой случайный выбор между 1 из 4 различных типов плиток: пустыня, трава, камень и вода.
Я попытался выполнить вложенный цикл for и отредактировать фрагменты с помощью функции findViewById (). У каждого фрагмента есть уникальный идентификатор, соответствующий его местоположению, но я не могу найти способ связать числа в цикле for с расположением фрагмента, например: R.id.tile i j
protected void randomizeTiles(){
Random rand = new Random();
ArrayList<Class <? extends GenericTile>> tileTypes
= new ArrayList<Class <? extends GenericTile>>();
tileTypes.add(0, Desert.class);
tileTypes.add(1, Grass.class);
tileTypes.add(2, Rock.class);
tileTypes.add(3, Water.class);
this.boardLayout = new GenericTile[9][13];
AssetManager manager;
manager = getAssets();
for(int i=0; i < 13; i ){
for(int j=0; j < 9; j ){
int n = rand.nextInt(4);
this.boardLayout[j][i] = (GenericTile) tileTypes.get(n).newInstance();
ImageView tilePic = (ImageView) findViewById(R.id.tile11);
InputStream open;
try{
open = manager.open(this.boardLayout[j][i].path);
Bitmap bitmap = BitmapFactory.decodeStream(open);
// Assign the bitmap to an ImageView in this layout
tilePic.setImageBitmap(bitmap);
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
}
}
<GridLayout
android:columnCount="9"
android:rowCount="14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="8"
android:alignmentMode="alignMargins">
<!-- row 1 -->
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile11"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile12"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile13"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile14"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile15"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile16"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile17"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile18"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile19"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
.............................
<!-- row 13 -->
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile131"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile132"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile133"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile134"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile135"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile136"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile137"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile138"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
<LinearLayout
android:layout_gravity="center_horizontal|center_vertical"
android:layout_margin="1dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/tile139"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:src="@drawable/desert"
tools:srcCompat="@drawable/desert" />
</LinearLayout>
</GridLayout>
Текущий код рандомизирует только один из фрагментов, а для остальных установлено изображение пустыни по умолчанию.
Ответ №1:
Добро пожаловать, Патрик, в StackOverflow.
Похоже, вы столкнулись с архитектурной проблемой: «Как я буду отражать i
s и j
s циклов for в сетке ImageViews размером 9×13″.
С этим можно справиться различными методами. Я даю вам простой способ здесь:
Создайте массив размером 9×13, содержащий все ваши просмотры изображений. Таким образом, при получении fooArrayOfImageViews[0][12]
вы получите изображение в правом верхнем углу. Строки:
this.boardLayout[j][i] = (GenericTile) tileTypes.get(n).newInstance();
ImageView tilePic = (ImageView) findViewById(R.id.tile11);
.....
tilePic.setImageBitmap(bitmap);
, стать
this.boardLayout[j][i] = (GenericTile) tileTypes.get(n).newInstance();
ImageView tilePic = fooArrayOfImageViews[j][i];
.....
tilePic.setImageBitmap(bitmap);
Надеюсь, это направило вас в правильном направлении.
Комментарии:
1. Спасибо. В итоге я использовал метод создания массива для imageviews, который вы указали. Мне пришлось жестко закодировать всю инициализацию, а не перебирать ее, что является своего рода проблемой, но сейчас это работает.