2017-06-09 17 views
0

私はこのアンドロイドプログラミングの新種ですので、この質問をしてよかったですが、私は助けが必要でした。 無限ループ内のテキストビューの色を変更する

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

    TextView textView = (TextView) findViewById(R.id.textView); 

    while(true){ 
     textView.setTextColor(Color.BLUE); 
     try{ 
      Thread.sleep(500); 
     } 
     catch (InterruptedException e) { 
      Log.e("InterruptedException", "Thread interrupted", e); 
     } 
     textView.setTextColor(Color.RED); 
    } 
} 

しかし、問題は、UI自体が更新されないということです: は、私はこのコードを試してみました無限ループ内のTextViewの色を変更したいです。私はonStart()に自分のコードを入れようとしましたが、それも助けにならなかった、誰かが私のコードをどこに置いてUIを無限ループで更新すべきか教えてください。

答えて

2

あなたの現在のコードは、適切にユーザーとの対話、ビューの更新を扱うからU​​Iを防ぐことができますアプリケーションのメインスレッドをブロックしているように見えますなど

スケジュールに変更をしたい場合は、ビューにRunnableをポストすることを検討したいかもしれません。だからこのようなもの:

TextView textView; 
Runnable changeTextColorRunnable = new Runnable() { 
    public void run() { 
     textView.setTextColor(calculateTextColor()); 
     textView.postDelayed(changeTextColorRunnable, 500); 
    } 
}; 

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

    textView = (TextView) findViewById(R.id.textView); 

    textView.post(changeTextColorRunnable); 
} 
3

初心者であることを心配しないでください。

Processes and Threadsについて読むまで、どのViewを操作するためにwhile()を使用しないことをお勧めします。UIスレッドとは何かを理解する必要があります。あなたの問題を解決するために

使用Animations、そのテーマに関する素晴らしいチュートリアルhereをクリックします - それはだけでなく、あなたを助けるビューの色を変更するだけでなく、あなたがしたいと思う何かをやってます。その後の知識のためのあなたの探求で

はあなたがonDraw()メソッドをオーバーライドView.classを拡張し、することにより、独自のカスタムビューを作成することができることを学びます、そして、すべてはあなたが描きたいです/色/操作が可能です。詳しくはhereをクリックしてください。

楽しんでください:)

関連する問題