2017-06-09 21 views
0

我是一種新的android編程,所以請問這個問題,但我需要幫助。 我想換一個TextView的顏色在一個無限循環我嘗試這樣的代碼:在無限循環中更改textView的顏色

@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); 
    } 
} 

但問題是,用戶界面不會自動更新。我甚至試圖將我的代碼放在onStart()中,但這也沒有幫助,請問有人可以幫我在哪裏放置我的代碼,以便UI在無限循環中自我更新?

回答

2

它看起來像你的當前代碼阻止該應用程序,這將阻止妥善處理用戶交互,查看更新UI的主線程等

如果你想使一個時間表的變化,您可能希望查看將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

難道你擔心做一個初學者沒關係。

我建議你永遠不要使用while()來操作任何視圖,直到你閱讀了關於Processes and Threads,你必須瞭解什麼是UI線程。

爲了解決你的問題: 使用Animations,點擊here關於這一議題偉大教程 - 它會幫助你不僅更改視圖的顏色,但也做其他事情你想要的。

在你的求知後來: 您將學習,你可以通過擴展View.class重寫的onDraw()方法創建自己的自定義視圖,那麼一切你想畫/顏色/操作可能適用於您,請點擊here瞭解更多信息。

玩得開心:)