2016-05-06 3 views
-1

非同期のアクティビティの背景を変更したい(またはテキストビューの背景を簡単に変更したい)。アンドロイドの背景色を非同期に設定する

間隔(ここでは500 MS)後に色が変わる必要があります。私は非同期クラスによってビューまたはテキストビューにアクセスできません。

これを行う方法はありますか?

private void setColor(int red, int yellow, int blue) { 
     View view = this.getWindow().getDecorView(); 
     view.setBackgroundColor(Color.rgb(red,yellow,blue)); 
    } 

    private class DisplayGradient extends AsyncTask<Clock, Void, Void> { 

     @Override 
     protected Void doInBackground(Clock... params) { 

      for(int i = 0; i < 10; ++i) { 
       try { 
        setColor(i*10,0,0); 
        Thread.sleep(500); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
       return null; 
     } 

答えて

2

Activity.runOnUiThreadを使用してください。

UIスレッドは、ビューを操作できる唯一のスレッドです。


あるいは、これは自動的にUIスレッドを使用View.postDelayed

view.postDelayed(new Runnable() { 
     int count = 0; 
     @Override 
     public void run() { 
      //do something on UI thread 
      if(count++ < 10) { 
       view.postDelayed(this, 500); 
      } 
     } 
    }, 500); 

を使用します。

+0

を開始したい、この行: '@Override 保護されたボイドdoInBackground(時計...のparams)について{ ( int i = 0; i <10; ++ i){ final int c = i * 10; runOnUiThread(新しいRunnableを(){ @Override公共ボイドラン(){ setColorを(C、0、0);} })。 try { Thread.sleep(500); } catch(InterruptedException e){ e.printStackTrace(); } } ' – sampa

0

コードの代わりにこの簡単な方法をお試しください。この

Handler handler = new Handler(); 

final Runnable r = new Runnable() { 
public void run() { 
    for(int i = 0; i < 10; ++i) { 
      try { 
       setColor(i*10,0,0); 
       Thread.sleep(500) 

      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 
}; 

コールのようなもの、あなたがこの方法で働いていた

handler.postDelayed(r, 500); 
+0

このコードは、実行時に同時に10回トリガするように' 'post'します。 – F43nd1r

+0

@ F43nd1rコードが更新されました。ループの終了後、実行可能ファイルがトリガーされます – Masum

+0

さて、コードは無限の 'postDelayed'呼び出しを生成します。 – F43nd1r

関連する問題