繁体   English   中英

用Android画布绘制时遇到问题

[英]Trouble with drawing with canvas Android

我创建了一个类,该类绘制了一个通过addTimeline()方法传递的时间轴。 该类扩展了View类,并且我已经重写了onDraw()方法。 在addTimeline()中,有一个“ invalidate()”调用,因此当插入时间线时,类将绘制它。 我通过“ for”语句并调用addTimeline()类在另一个扩展Activity的类中添加了一些时间线。

好吧,只有绘制的最后一个时间线被绘制,之前的时间线未显示,只有空白。

有谁能理解我的应用程序为何具有这种行为?

谢谢。

*我已添加代码*

在这里,我插入时间表

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

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

如果您需要支持大量的时间线,那么最终您将开始看到onDraw()方法的性能onDraw()需要做很多事情。 此时,您可以考虑定期将画布写入位图并清除时间线数组,并在绘制其他时间线之前先绘制位图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM