用画布Android绘制麻烦

时间:2014-08-28 14:28:25

标签: android canvas drawing

我创建了一个绘制addTimeline()方法传递的时间轴的类。 这个类扩展了View类,并且我已经完成了onDraw()方法的重写。在addTimeline()中,有一个" invalidate()"调用,所以当插入时间轴时,类会绘制它。我在另一个类中添加了一些时间轴,它扩展了Activity,通过" for"声明并调用addTimeline()类。

嗯,只绘制了创建的最后一个时间轴,之前没有显示,只有空白区域。

有没有人能理解为什么我的应用程序会出现这种行为?

感谢。

*我已添加代码*

这里,我插入时间轴

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

在活动中,我已编写此代码以插入时间轴

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,
}

1 个答案:

答案 0 :(得分:0)

调用onDraw()时,每次都会获得一个完全擦除的画布。所以要做你想做的事,你需要你的addTimeline方法将时间轴的记录添加到某种数组中。然后在onDraw()中,您可以遍历数组并绘制每个时间轴。

如果你需要支持大量的时间表,你最终会看到来自onDraw()方法的性能损失必须做多。此时,您可以考虑定期将画布写入位图并清除时间轴数组,并在绘制其他时间轴之前绘制位图。