
我正在创建一个折线图,我最初使用的代码绘制速度很慢,以至于无用.我用在网上找到的代码替换它,它变得更快.我只是好奇为什么原始代码是如此之慢.下面发布的所有代码都在自定义视图的onDraw()方法中:
原始慢代码:
float yStart = 300f; for (int i=0; i < values.length; i++){ drawPath.moveto(xStart, yStart); drawPath.lineto(xStart+10, values[i]); drawPath.close(); canvas.drawPath(drawPath, linePaint); xStart += 10; yStart = values[i]; }后来的快速代码:
float datalength = values.length; float colwIDth = (wIDth - (2 * border)) / datalength; float halfcol = colwIDth / 2; float lasth = 0; for (int i = 0; i < values.length; i++) { float val = values[i] - min; float rat = val / diff; float h = graphHeight * rat; if (i > 0) canvas.drawline(((i - 1) * colwIDth) + (horStart + 1) + halfcol, (border - lasth) + graphHeight, (i * colwIDth) + (horStart + 1) + halfcol, (border - h) + graphHeight, linePaint); lasth = h;我只是不明白为什么一个人比另一个人更有效率.有任何想法吗?
解决方法:
使用Paths使绘图明显慢于简单地告诉Canvas在两点之间绘制直线,因为Path是一个比drawline()使用的2点更复杂的对象.路径也根据油漆中的样式填充和构图,这也可能导致减速.
通常,在循环中使用对象并调用许多方法会降低代码的速度.
总结以上是内存溢出为你收集整理的android – 为什么算法这么慢?全部内容,希望文章能够帮你解决android – 为什么算法这么慢?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)