2011-02-05 21 views
0

これを行う方法は少し不満です。以下のコードを参考にしてください。私は円を2秒間隔で色を変える必要があります。何かを見つけることはできません。基本的に私は以下のことを理解できれば十分でしょう。Androidでスレッドを使用して色を変更する

1.私はExatends View 2.私はDrawCircleクラスをインスタンス化するActivityプログラムを持っています。 質問:

1 - どこでスレッドを作成しますか?アクティビティまたはDrawCircleクラスで実行されますか?実行した場合、run()に何を入れますか?

2 - "Thread.sleep(2000)"はどこに配置しますか? 3.そして、最後に、私がDrawCircleクラスを持っていることを確認するために必要なものと、アクティビティやメインプログラムの中で何を確実にする必要がありますか?私はちょうど2秒

の間隔で円の色の変更を行う必要があり

は(私はすでにこの仕事をしようとして12時間を費やしているし、多分私はちょうどもうそれを行うはずのすべての助けをありがとうございましたここでは)

は活動であり、ここで私のクラスは

0であるコード

public class ColorChanges extends Activity { 
    DrawCircle dc; 
    Paint pa = new Paint(); 


    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {  
     super.onCreate(savedInstanceState); 

       //this line does not work 

      dc = new DrawCircle(this,pa); 
      dc.setBackgroundColor(Color.WHITE);  
      drawCircleToCanvas(); 
      setContentView(dc);  
      } 

    void drawCircleToCanvas() 
    {  

     final Handler handler = new Handler() 
      {     
      public void handleMessage(Message msg) { 
       pa.setColor(Color.BLUE); 
       dc.setBackgroundColor(Color.RED); 

       dc.postInvalidate();       
       }     
      };   
      Thread updateUI = new Thread()  
      {       
       public void run() {        

        try { 
         for (int i=0;i<20;i++){ 
         Thread.sleep(2000); 
         handler.sendMessage(handler.obtainMessage()); 
         } 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

       }      
       };      
       updateUI.start();  

       } 

}

です

public class DrawCircle extends View { 
Paint p1 = new Paint(); 
Paint p2 = new Paint(); 
Paint p3 = new Paint(); 

Paint pAll[] = new Paint[3]; 


public DrawCircle(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 
public DrawCircle(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
} 

public DrawCircle(Context context, Paint p) { 
    super(context); 
     p1 = p; 
     p1.setStyle(Paint.Style.STROKE); 
     p1.setColor(Color.GREEN); 
     p1.setStyle(Paint.Style.FILL); 



    // TODO Auto-generated constructor stub 
} 

@Override 
public void onDraw(Canvas canvas) 
{  

      canvas.drawCircle(200, 200, 100, p1); 
} 

}

+1

実際のコードを掲載できますか?どのように、なぜあなたは別の(UIから離れた)スレッドでこれをやろうとしているのかはっきりしていません。 –

+0

同じUIに入れてThread.sleep(2000)を実行すると、すべてが黒くなる – earm

答えて

0

UIスレッドでそれを行います。 Thread.sleepの代わりに、Handler.postDelayed()を2秒の遅延で使用します。

+0

とてもうれしく働いています – earm

関連する問題