2014-08-28 93 views
0

我創建了一個繪製addTimeline()方法傳遞的時間軸的類。 這個類擴展了View類,我完成了onDraw()方法的重載。在addTimeline()中有一個「invalidate()」調用,所以當插入時間線時,class將繪製它。我在另一個類中添加了一些時間軸,它通過「for」語句並調用addTimeline()類來擴展Activity。用畫布繪製麻煩Android

那麼,只繪製了上一個創建的時間線,之前沒有顯示,只有空白區域。

有沒有人可以理解爲什麼我的應用程序有這種行爲?

謝謝。

*我已經添加CODE *

在這裏,我插入時間軸

public void addTimeline(int x, int y, int totaleDurata, int distanzaIntervalli, int spessore, int color) 
{ 
    this.totaleDurata = totaleDurata; 
    this.spessoreTimeline = spessore; 
    this.color = color; 
    this.coordinataX = x; 
    this.coordinataY = y + 10; 
    this.distanzaIntervalli = distanzaIntervalli; 
    setPaint(); 
    invalidate(); 
} 

方法的onDraw()和setPaint()

private void setPaint() 
{ 
    p.setStyle(Paint.Style.FILL_AND_STROKE); 
    p.setAntiAlias(true); 
    p.setColor(color);  
    p.setStrokeWidth(1); 
} 

protected void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    canvas.drawColor(Color.CYAN); 
    disegnaGrain(canvas,p); 
    disegnaRettangolo(canvas,p); 
    disegnaPunta(canvas,p); 
} 

在活動I」已經寫了這段代碼來插入時間線

for(int i=1, atLeastLength = 100, x = 10, y = 30; i<=5; i++, y += 100) 
{ 
    setContentView(disegnoTimeline); 
    Random r = new Random(); 
    int randomNum = r.nextInt((550 - 100) + 1) + 100;  
    disegnoTimeline.postInvalidate(); 
    disegnoTimeline.addTimeline(x, y, atLeastLength + randomNum, 
} 
+0

您能否向我們提供您的onDraw代碼以及您致電何處無效? – hoomi 2014-08-28 14:34:19

+1

如果你只是發表一個模糊的描述,我們不能幫助。如何一點點的代碼,甚至應用程序的屏幕截圖? – Gumbo 2014-08-28 14:40:03

回答

0

當調用onDraw()時,您將得到一張完全擦除的畫布,以便每次都可以使用。所以要做你想做的事,你需要你的addTimeline方法來添加時間線記錄到某種數組。然後在onDraw()中,您可以遍歷數組並繪製每個時間軸。

如果您需要支持大量的時間表,您最終將開始看到來自onDraw()方法的性能衝擊必須這麼做。此時,您可能會考慮定期將畫布寫入位圖並清除時間軸數組,然後在繪製額外的時間軸之前繪製位圖。

+0

感謝您的回覆,我嘗試按照您的建議! – user3653803 2014-08-28 15:22:41

+0

這解決了這個問題。 :) – user3653803 2014-08-28 15:48:58