2016-06-30 24 views
-1

RelativeLayoutビューにいくつかのImageViewsを追加したいと思います。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(); 

ループが正常に動作初めてが、2番目の時間が行にエラーがあります:

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

があります問題?

答えて

0

大きな問題の1つは、バックグラウンドスレッドからのビューの操作(ビューの追加など)です。 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にアニメーションを使用できませんでした。手伝ってくれますか? –

関連する問題