我对如何做到这一点感到有点沮丧..,任何人都可以帮助我或指导我正确的方向吗?,代码如下。我只需要在2秒的时间间隔内换一个圆圈,我就找不到任何东西..基本上如果我能理解下面就足够了
1.我有一个类调用DrawCircle,Exatends View 2.我有Activity程序,我在其中实例化DrawCircle类。 问题:
1 - 我在哪里创建线程?在Activity或DrawCircle类中?如果我这样做,我应该在run()中添加什么;
2 - 我在哪里放“Thread.sleep(2000)”? 3.最后,我需要确保在DrawCircle类中有什么,以及我应该确保我在Activity或主程序中有什么?
我只需要以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();
}
}
这是活动,这是我的班级
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);
}
}
答案 0 :(得分:0)
在UI线程中执行此操作。而不是Thread.sleep,使用Handler.postDelayed()延迟两秒。