2013-03-28 26 views
2

我有一個ImageView對象,R.id.tile,在我的XML佈局中定義的,我想要做的是創建它的克隆並將它們放在不同的座標處。如何以編程方式創建ImageView對象的多個副本?

這是我到目前爲止有:

protected void onCreate(Bundle savedInstance) 
    { super.onCreate(savedInstance); 
     setContentView(R.layout.board_layout); 
     layout = (AbsoluteLayout)findViewById(R.id.board); 
     img = (ImageView)findViewById(R.id.tile); 
     View[] tiles = new ImageView[9]; 
     for (int i = 0; i<tiles.length; i++) { 
      tiles[i] = (ImageView)findViewById(R.id.tile); 
     } 

     for(int i=0; i<3; i++){ 
      for(int j=0; j<3; j++){ 
       tiles[i+j].setX((float) 32*2*i); 
       tiles[i+j].setY((float) 34.39*2*j); 
      } 
     } 
    ... 

但是當我調試它一直停就行磚[i] =(ImageView的)findViewById(R.id.tile);
與錯誤「找不到源」。

任何想法?你原來

您的問題

+0

有你爲什麼要使用原來的ImageView的克隆,而不是製造新的問題,並制定自己的形象是相同的具體原因是什麼?我認爲後一種方法會容易得多。然後你可以調用'layout.addView(tiles [i]);'將新的添加到你的佈局中。 – FoamyGuy

+1

@FoamyGuy也許他不想以編程方式設置原始圖像視圖獲取的所有屬性或樣式,如height,widht,..等等。 – Pragnani

+1

@Pragnani可能,如果是這種情況,那麼他可以在它的layout.xml文件中聲明ImageView,然後使用LayoutInflater創建新的,這將使它們都被預先設置爲所需的配置。 – FoamyGuy

回答

-1
ImageView imageview=new ImageView(context); 

imageview=yourimageview //副本試試這個

View[] tiles = new ImageView[9]; 
ImageView testview= (ImageView)findViewById(R.id.testview); 

for (int i = 0; i<tiles.length; i++) { 
      tiles[i] = new Imageview(context); 
     } 
+0

我使用了這些變化,沒有更多的錯誤(耶!),但只有瓦片的第9個實例(最後一個元素)出現在佈局上。我猜這是因爲'tiles'數組的每個元素指向同一個對象? – LanguidLegend

+0

@AdamChoate是啊...採取與單個imageview在其中的單獨佈局..然後膨脹的ImageView獲得它的副本..並使用該圖像..作爲FoamGuy建議 – Pragnani

+0

我必須創建一個新的佈局imageview的每個實例?你能告訴我如何? – LanguidLegend

1

activity_main.xml中

<LinearLayout 
    android:id="@+id/linear" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
</LinearLayout> 

MainActivity.java

ImageView iv; 
LinearLayout linear; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    linear = new LinearLayout(this); 
    linear = (LinearLayout)findViewById(R.id.linear); 

    for(int i=1;i<10;i++) 
    { 
     iv = new ImageView(this); 
     iv.setImageResource(R.drawable.plus); 
     iv.setPadding(0,0,0,20); 
     linear.addView(iv); 
    } 
} 

應用查看這個樣子的 app view

相關問題