2011-09-23 28 views
0

我有一個textview,我有很多按鈕。其中一個按鈕應該能夠啓動'動畫',它不是動畫中的動畫,它只需要使文本變紅2秒,而文本應該變綠爲2秒而不是再變回紅。 .. - 其中一個按鈕應該停止'動畫'並將文本設置爲白色 -one應該使文本恢復1秒,而不是藍色2秒並再次返回黑色...什麼是閃爍文字的正確方法

點在任何時候都應該能夠按下按鈕。

我想我應該使用處理程序,但我不知道該pat,,我不知道該如何停止線程應該看起來像,我的意思是當我開始線程後,我應該告訴他停止.. 。 做這個的最好方式是什麼 ?

我總是編寫這種用愚蠢的技巧來思考,我不知道什麼是模式,什麼是正確的方式來做到這一點?

感謝

這裏是我如何做到這一點一些代碼,但我覺得這是不正確的做法

private boolean flagForStop=true; 
    private Handler handler1=new Handler(){ 

     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      switch (msg.what) { 
      case 0: 
       flagForStop=false; 
      case 1: 
       flagForStop=true; 
       break; 
      case 2: 
       new Thread(){ 
        public void run(){ 
         while(true){ 
          if(flagForStop)break; 
          try { 
           Thread.sleep(1000); 
          } catch (InterruptedException e) { 
           e.printStackTrace(); 
          } 
          //do something 
         } 
        } 
       }.start(); 
       break; 
      default: 
       break; 
      } 
     } 

    }; 

,比我的聽衆像 handler1.sendEmptyMessage(0) ;

+1

我想閃爍的文字已被禁止前很長一段時間! –

+0

這並不是說文本會眨一下其他動作就會繼續,重點是模式,編碼事物的方式......,這是我不明白的部分,我不知道什麼是正確的方法來做這種場景 – Lukap

回答

0

下面是我該怎麼做,它不是完美的,但它應該適用於上面提到的所有類型的動畫。

首先創建一個名爲AnimStep其中包含兩個字段類:時間顏色。構造函數是AnimStep(int time,String color)

然後創建一個名爲AnimSequence的類,其中包含AnimStep對象的數組。您可以通過this.getStep(index)獲得具體的步驟。

例如AnimSequence爲 「粉紅2秒鐘,然後品紅3秒鐘然後黑色永遠」 將包含AnimSteps以下數組:{新AnimStep(0, 「粉紅色」),新AnimStep(2, 「品紅」) ,new AnimStep(5,「black」)}

然後創建一個名爲的動畫,它在一個單獨的線程中永久運行並定期喚醒(例如每100ms)。這個類有三個字段:

  • 序列:一個指針一個AnimSequence對象
  • STARTTIME:時間戳
  • 步驟:其表示在陣列中的元素的索引的整數AnimStep

當您單擊按鈕時,您將AnimSequence傳遞給動畫。這將this.sequence設置爲給定的AnimSequence,this.startTime =,this.step = 1.它還將文本的顏色設置爲AnimSequence中第一個AnimStep的顏色。

現在每次動畫醒來時,它執行以下操作:

if (this.step >= this.sequence.size()) return // do nothing 
currentStep = this.sequence.getStep(this.step) 
elapsedTime = <current time stamp for now> - this.time 
if (elapsedTime >= currentStep.time) { 
    this.step++ 
    yourtext.color = currentStep.color 
} 
+0

但問題是我有一個2個圖像的序列,這兩個應該交換未知的時間,直到有人按另一個按鈕 – Lukap

+0

我應該如何啓動/停止單獨的線程? – Lukap

+0

@Lukap:停止和啓動線程在這個答案中解釋:http://stackoverflow.com/questions/1921514/how-to-run-a-runnable-thread-in-android。 –