2014-03-06 51 views
1

我現在有一個視圖,它是在onCreate之後添加的(取決於其他一些變量)。一切都按照它應該的方式工作,並畫出圓圈的一部分。重繪視圖Android

但我的問題是我如何重繪它以後呢?在獲取一些數據後,我需要改變圓中的角度。

代碼爲WINDROSE:

public class WindRose extends View { 

    public WindRose(Context context) { 
     super(context); 


    } 

    @Override 

    protected void onDraw(Canvas canvas) { 


     super.onDraw(canvas); 
     canvasTest = canvas; 


     float height = (float) getHeight(); 
     float width = (float) getWidth(); 

     float radius; 

     if (width > height) { 
      radius = height/2; 

     } else { 
      radius = width/2; 
     } 

     // radius = (height)/ 2; 


     Path path = new Path(); 
     path.addCircle(width, height, radius, Path.Direction.CCW); 

     ///2 

     Resources resources = getResources(); 
     int color = resources.getColor(R.color.green_back); 



     paint.setColor(color); 
     paint.setStrokeWidth(5); 

     paint.setStyle(Paint.Style.FILL); 
     float center_x, center_y; 
     center_x = width/2; 
     center_y = height/2; 



     //Formulas : 
     //SD = Start Degree 
     //ED = End Degree 

     //If cakepiece passes 0 (East) 
     //SD, 360-(SD+ED) 

     //Else : 
     //SD, (ED-SD) 

     oval.set(center_x - radius, center_y - radius, center_x + radius, center_y + radius); 

     if (End > Start) { 
      canvas.drawArc(oval, Start, (End - Start), true, paint); 

     } else if (End < Start) { 
      canvas.drawArc(oval, Start, ((360 - Start) + End), true, paint); 
     } 


    } 


} 

如果我更新StartEnd變量沒有任何反應。我也曾嘗試在課堂上致電invalidate,但在那裏我沒有得到任何重繪。我已經試過

作廢:

WindRose windrose = new WindRose(this); 
windrose.invalidate(); 

從主類WINDROSE是一部分調用。

我該如何正確地做到這一點?

+0

我剛纔看到,您已經寫道,無效無效。你可以驗證,在調用invalidate之後onDraw()方法是否被調用? – peshkira

+1

但是從這個代碼片段看來你創建了一個新的視圖並且在它上面調用了invalidate而不是你已經在onCreate()中繪製的視圖。這是爲了展示你如何稱呼無效,或者你是否像這樣稱呼它? – peshkira

+0

我可以通過調試確認OnDraw()在invalidate後不被調用。只有調用onCreate – Dukes

回答