2016-08-25 13 views
0

こんにちは私はonuithreadをスレッド内で実行していますが、時間があり、リストから2つの項目を選択するまで、時間がゆっくりとランダムに変化します。私の問題は、このアイテムには写真があり、そのアイデアは名前が変わるたびに変更する必要がありますが、写真を追加するときには次のように表示されることです。 66フレームをスキップしました!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。イメージをアレイに読み込んで高速表示する方法

イメージを配列にロードする方法はありますか?また、runuithreadでは、それらを再度ロードせずに表示するだけですか?ここで私のrunuithread:

while (i < 400) { 
       try { 
        Thread.sleep(i); 
        // here you check the value of getActivity() and break up if needed 
        if (getActivity() == null) { 
         return; 
        } 
        getActivity().runOnUiThread(new Runnable() // start actions in UI thread 
        { 

         @Override 
         public void run() { 
          start_btn.setEnabled(false); 
          Collections.shuffle(numbers); 
          Collections.shuffle(players_list); 
          player1_tv.setText(players[players_list.get(0)]); 
          player2_tv.setText(players[players_list.get(1)]); 
          group1_tv.setText(all_teams.get(numbers.get(0))); 

          player1_iv.setImageResource(getResources().getIdentifier(pictures.get(numbers.get(0)),"drawable",con.getPackageName())); 
          group2_tv.setText(group.get(numbers.get(1))); 
          i += 30; 

          if (i > 420) { 
           start_btn.setEnabled(true); 
          } 
         } 
        }); 
       } catch (InterruptedException e) { 
        // ooops 
       } 

答えて

1

ビットマップオブジェクトとしてイメージをロードして保存することができます。あなたは、このようなリソースからビットマップをロードすることができます。

Bitmap bm = BitmapFactory.decodeResource(getResources(), {resourceId}); 

次にあなたが画像を設定することができます。これは

+0

こんにちはアントンを助け

player1_iv.setImageBitmap(bm); 

希望を、RESOURCEIDが配列またはリソースのですか?イメージを1つずつ読み込むと、アプリケーションでUIで多すぎる作業をしているというエラーが表示されるためです。私はすべてのイメージを準備し、onuithreadの外にロードしてから、それを次々に表示する必要があります – ElvisBoss

+1

イメージをUIスレッド外の配列にロードすることができます。次に、この配列をUIスレッドで使用して、ImageViewのビットマップを設定します。この配列を必要としないときにリリースすることを忘れないでください。 Androidアプリはメモリ消費に敏感です。 –

+0

これを行う方法を教えていただけますか?今、私は配列内にすべてのイメージ名を持っていますが、ビットマップ配列にロードするにはどうしたらいいですか? – ElvisBoss

関連する問題