How to inflate new copies of an ImageView object on a layout?

后端 未结 1 1995
猫巷女王i
猫巷女王i 2021-01-07 03:01

What I am trying to do is create N (in this case 9) copies of the ImageView object R.id.tile, place each of them at different coordinates on the layout

相关标签:
1条回答
  • 2021-01-07 04:02

    Edit:

    First create a layout with one ImageView with the properties you like

    Example:

    create file in res/layout/singleimage.xml

    <?xml version="1.0" encoding="utf-8"?>
    <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
               android:id="@+id/image2"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:src="@drawable/ic_launcher"
               android:contentDescription="Sample"/>
    

    And then inflate the ImageView to get the copies of it like this

    View[] tiles = new ImageView[9];
    // get reference to LayoutInflater
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    for(int i = 0; i<tiles.length; i++) {
        //Creating copy of imageview by inflating it
        ImageView image = (ImageView) inflater.inflate(R.layout.singleimage, null);
        tiles[i] = image;
        tiles[i].setId(i);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(-1, 345);
        params.leftMargin = 32*2*3;
        params.topMargin = 34*2*3;
        layout.addView(tiles[i]);
    }
    

    You have set id to i value here

    tiles[i].setId(i);  
    

    But you are (incorrectly) trying to get it from your other resource (the one you wanted to 'clone'):

    layout.addView(tiles[i] = (ImageView) findViewById(R.id.tile)); // INCORRECT
    

    Instead, set the id manually as above, and then:

    layout.addView(tiles[i]);
    

    And there is no need to call findViewById()

    0 讨论(0)
提交回复
热议问题