从线程调用invalidate方法

时间:2013-07-16 17:15:34

标签: android

我正在寻找一种从线程调用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();
    }
}
}

1 个答案:

答案 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