2013-07-16 2 views
2

Я ищу способ вызова метода invalidate из потока. В основном, что я хочу сделать, это позвонить этому методу onDraw из DrawThread.Вызвать метод 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, вызовите postInvalidate().

public void postInvalidate()

Добавлено в уровне API 1

вызвать Invalidate произойдет на последующем цикле через цикл обработки событий. Используйте это, чтобы аннулировать представление из потока, отличного от UI.

Этот метод может быть вызван из-за пределов пользовательского интерфейса только тогда, когда этот вид прикреплен к окну.

Подробнее @

http://developer.android.com/reference/android/view/View.html

+0

сэр Как я присоединять мою точку зрения с окном? – user2586942

+0

вид с окном? вы можете использовать 'setContentView (myview) MyView myview = new MyView();' MyView - это класс, а затем exteands 'View'. – Raghunandan

+0

и сэр, если я хочу добавить кнопку на этот view.how вы предлагаете мне сделать that.i я полный новичок в android. – user2586942

Смежные вопросы