Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用canvas Android绘制时遇到的问题_Android_Canvas_Drawing - Fatal编程技术网

使用canvas Android绘制时遇到的问题

使用canvas Android绘制时遇到的问题,android,canvas,drawing,Android,Canvas,Drawing,我创建了一个类,用于绘制addTimeline()方法传递的时间线。 这个类扩展了View类,我已经重写了onDraw()方法。在addTimeline()中有一个“invalidate()”调用,所以当插入时间线时,类将绘制它。我在另一个类中添加了一些时间线,该类通过“for”语句和调用addTimeline()类来扩展活动 好的,只有最后创建的时间线被绘制,之前的时间线没有显示,只有空白 有人能理解为什么我的应用程序有这种行为吗 谢谢 *我添加了代码* 在这里,我插入时间线 public v

我创建了一个类,用于绘制addTimeline()方法传递的时间线。 这个类扩展了View类,我已经重写了onDraw()方法。在addTimeline()中有一个“invalidate()”调用,所以当插入时间线时,类将绘制它。我在另一个类中添加了一些时间线,该类通过“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()的

在一个活动中,我编写了这段代码来插入时间线

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,
}
for(int i=1,atLeastLength=100,x=10,y=30;i当调用
onDraw()
时,每次都会得到一个完全擦除的画布。因此,要执行您想要的操作,您需要使用
addTimeline
方法将时间线的记录添加到某种数组中。然后在
onDraw()中
您可以在阵列中循环并绘制每个时间线


如果您需要支持大量的时间线,您最终将看到
onDraw()对性能的影响方法必须这么做。在这一点上,你可能会考虑定期将画布写入位图并清除时间线数组,然后在绘制额外的时间线之前绘制位图。

你能提供你的OnDead代码和你调用无效的地方吗?如果你只是发布了一个模糊的描述,我们就无能为力了。关于一点代码,甚至是一个应用程序的屏幕截图?谢谢你的回复,我尝试按照你的建议!
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,
}