我正在寻找一种从线程调用invalidate方法的方法。基本上我想要做的是从onDraw
调用此DrawThread
方法。
protected void onDraw(Canvas canvas) {
// Drawing commands go here
canvas.drawArc(oval, strt, arc, true, cPaint);
while(i<90)
{
canvas.drawText(z,300,300, tPaint);
break;
}
class DrawThread extends Thread
{
GameView a;
Canvas canvas;
DrawThread(GameView a)
{
this.a=a;
start();
}
public void run()
{
a.flag2=true;
while(a.flag2)
{
try
{
sleep(200);
}
catch(Exception e)
{
}
if(!a.flag1)
{
a.x+=10;
if(!a.flag3)
{
a.strt-=15;
a.arc+=15;
}
else
{
a.strt+=15;
a.arc-=15;
}
}
if(a.flag1)
{
a.x-=10;
if(!a.flag3)
a.arc+=15;
if(a.flag3)
a.arc-=15;
}
if(a.x==600)
{
a.y+=60;
a.flag1=true;
a.strt=180;
a.arc=315;
}
if(a.x==30)
{
a.y+=60;
a.flag1=false;
a.strt=45;
a.arc=315;
}
if(a.y>=600)
{
a.y=60;
}
if(a.strt==0 || a.arc==360)
{
a.flag3=true;
}
if(a.strt==45 || a.arc==315)
{
a.flag3=false;
}
if(a.n1==a.x&&a.n2==a.y)
{
a.i+=1;
a.n1 = Math.random()*10;
a.n2 = Math.random()*60;
}
a.invalidate();
}
}
}
答案 0 :(得分:2)
使用postInvalidate()
从非ui线程刷新视图。
public void invalidate ()
在API级别1中添加
使整个视图无效。如果视图可见,将在某个时间点调用onDraw(android.graphics.Canvas)。 必须从UI线程调用此方法。要从非UI线程调用,请调用postInvalidate()。
public void postInvalidate ()
在API级别1中添加
导致在事件循环的后续循环中发生无效。 使用此选项可以从非UI线程中使视图无效。
只有当此视图附加到窗口时,才能从UI线程外部调用此方法。
更多信息@
http://developer.android.com/reference/android/view/View.html