2013-07-16 57 views
2

我正在寻找一种方法来从线程中调用invalidate方法。基本上我想要做的就是从DrawThread调用onDraw方法。从线程中调用invalidate方法

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

回答

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

+0

先生我如何附上了一个窗口我的观点? – user2586942

+0

查看窗口?你可以使用'setContentView(myview)MyView myview = new MyView();'MyView是一个类,然后是外观'View'。 – Raghunandan

+0

和先生,如果我想添加一个按钮到这个view.how你建议我做那个。我是一个完整的初学者在android。 – user2586942

相关问题