Как мне сгенерировать сетку из рандомизированных фрагментов в действии Android с учетом 4 разных файлов изображений?

#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, который вы указали. Мне пришлось жестко закодировать всю инициализацию, а не перебирать ее, что является своего рода проблемой, но сейчас это работает.