2011-04-12 35 views
0

,所以我創建了一個名爲「繪製圖」無效只能在自定義視圖

class DrawableView extends View{ 
     Context mContext; 

     int touches=0,k,Xoffs,clicks=0; 


    double x_1 = 0,x_2=0; 

     private float mLastTouchX, mLastTouchY; 

     public DrawableView(Context context) { 
     super(context); 
     mContext = context; 
     } 

.... 
    @Override 
    protected void onDraw(Canvas canvas){ 

     Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 

canvas.drawColor(Color.BLUE); 
myPaint.setColor(Color.WHITE); 

canvas.drawCircle(200, 100, 20, myPaint); 


    } 

..... more code.... 

} 

視圖,它只能在OnDraw的命令中是無效的!即:調用「invalidate();」在ondraw命令結束時會導致它循環。我已經嘗試了很多次調用g_draw.invalidate();或g_draw.postInvalidate(); (g_draw是創建的可繪製視圖的名稱)從其他類甚至主要活動類,它不起作用。爲什麼以及如何修復它?

感謝

回答

0

如果你想continious的onDraw調用試圖在另一個線程做。創建一個線程,並從其run方法嘗試執行postInvalidate。

它總是爲我工作。

另一件事是,當你畫一個圓圈,下一次不會有所作爲 - 它看起來是一樣的。

+0

是的,這只是一些測試代碼...它應該有其X座標是其他地方更新的X_1。我修正了它,我在主要活動課上有兩個「g_draw」實例,一個在我的菜單類中......這導致它永遠不會更新。刪除菜單類中的一個,現在我可以從線程調用postinvalidate。感謝您的答覆! – ajax09 2011-04-12 17:35:51

0

您可能想要在DrawableView類的某個地方調用invalidate()。例如,如果你希望你的視圖的任何觸摸事件後重繪本身,你會做這樣的事情:

public boolean onTouchEvent(MotionEvent event) { 

    if(event.getAction() == MotionEvent.ACTION_UP){ 
     invalidate(); 
    } 
} 

這是我在我的益智遊戲畫動件。