Android使用线程更改颜色

Android使用线程更改颜色,android,Android,对于如何做到这一点,我感到有点沮丧。有谁能帮助我或指引我正确的方向吗?请使用下面的代码。我只需要画一个圆圈,每隔2秒钟换一次颜色,我在那里什么也找不到。。基本上,如果我能理解以下内容就足够了 1.我有一个叫DrawCircle的班级,它能让我的观点更清晰 2.我有一个活动程序,我在其中实例化DrawCircle类。 问题: 1-我在哪里创建线程?在活动中还是在DrawCircle类中?如果我这样做,我应该在跑步中放什么() 2-我应该把“线程.睡眠(2000)”放在哪里?3.最后,我需要确保我在

对于如何做到这一点,我感到有点沮丧。有谁能帮助我或指引我正确的方向吗?请使用下面的代码。我只需要画一个圆圈,每隔2秒钟换一次颜色,我在那里什么也找不到。。基本上,如果我能理解以下内容就足够了

1.我有一个叫DrawCircle的班级,它能让我的观点更清晰 2.我有一个活动程序,我在其中实例化DrawCircle类。 问题:

1-我在哪里创建线程?在活动中还是在DrawCircle类中?如果我这样做,我应该在跑步中放什么()

2-我应该把“线程.睡眠(2000)”放在哪里?3.最后,我需要确保我在DrawCircle课程中有什么?我应该确保我在活动或主程序中有什么

我只需要做一个圆圈,每隔2秒钟换一次颜色

非常感谢您的帮助(我已经花了12个小时来努力完成这项工作,也许我不应该再这样做了)

这是密码

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();       

                }  

}在UI线程中执行此操作。不要使用Thread.sleep,而是使用Handler.postdayed()并延迟两秒。

您能发布实际代码吗?我不清楚你是如何或为什么试图在一个单独的(非UI)线程中这样做的。如果我把它放在同一个UI中,然后我做一个线程。sleep(2000),它会变成黑色
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); 
}