我创建了一个绘制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,
}
答案 0 :(得分:0)
调用onDraw()
时,每次都会获得一个完全擦除的画布。所以要做你想做的事,你需要你的addTimeline
方法将时间轴的记录添加到某种数组中。然后在onDraw()
中,您可以遍历数组并绘制每个时间轴。
如果你需要支持大量的时间表,你最终会看到来自onDraw()
方法的性能损失必须做多。此时,您可以考虑定期将画布写入位图并清除时间轴数组,并在绘制其他时间轴之前绘制位图。