2016-06-30 72 views
-1

我想添加一些ImageViews到RelativeLayout視圖。我怎樣才能一些ImageView添加到relativeLayout

,我正在使用的代碼如下:

Thread thread = new Thread(new Runnable() { 
     ArrayList<ImageView> icons = new ArrayList<ImageView>(); 

     @Override 
     public void run() { 
      for (int i = 0; i < 20; i++) { 

       ImageView imageView1 = new ImageView(G.context); 
       imageView1.setImageResource(R.drawable.music_icon); 
       imageView1.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT)); 
       imageView1.getLayoutParams().width = (int) convertDpToPixel(20); 
       imageView1.getLayoutParams().height = (int) convertDpToPixel(20); 

       icons.add(imageView1); 

       Log.i("LOG", "Icons Size: " + icons.size()); 
       Log.i("LOG", "I: " + i); 

       relativeLayout.addView(icons.get(i)); 

       icons.get(i).startAnimation(animationMusic); 

       try { 
        Thread.sleep(3000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
    thread.start(); 

第一次循環運行良好,但第二次出現在該行的錯誤:

relativeLayout.addView(icons.get(i)); 

在哪裏問題?

回答

0

一個主要問題是從後臺線程操縱視圖(例如添加視圖)。您可以通過使用Android的AsyncTask對象來獲得類似的異步行爲,並通過onPostExecute方法執行任何UI操作。

不知道更多關於你在做什麼,很難找到適合你的解決方案。我主要指出你的代碼的主要問題。

這裏是重寫的方式,可能會在Android環境中更好地工作,你的代碼的嘗試:

public void addImageViews() { 
    for(int i = 0; i < 20; i++) { 
     asyncAdd(i, G.context); 
    } 
} 

protected void asyncAdd(final int index, final Context c) { 
    new AsyncTask<Void, Void, Void>() { 
     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       Thread.sleep(3000 * index); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      relativeLayout.addView(generateImageView(c)); 
     } 

    }.execute(); 
} 

protected ImageView generateImageView(Context c) { 
    ImageView imageView1 = new ImageView(c); 
    imageView1.setImageResource(R.drawable.music_icon); 
    imageView1.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT)); 
    imageView1.getLayoutParams().width = (int) convertDpToPixel(20); 
    imageView1.getLayoutParams().height = (int) convertDpToPixel(20); 
    return imageView1; 
} 
+0

您可以檢查一個例子嗎? –

+0

更新了示例代碼 – FishStix

+0

謝謝親愛的朋友。 我試過你的代碼,它很好。 但我無法將我的動畫用於imageView。你能幫我嗎? –