android画布-我可以有多种绘制方法吗?
我创建了自己的canvas类,它扩展了imageView。我的onDraw()方法提取用户的gps位置,每次用户移动时我都会调用这个onDraw方法。我的问题是我还想画一条gps轨迹,它只需要画一次(用户移动时不需要更新)。我想知道是否有可能有不止一种onDraw方法,或者是否有任何方法可以将1)用户位置和2)gps轨迹分开android画布-我可以有多种绘制方法吗?,android,android-canvas,draw,ondraw,Android,Android Canvas,Draw,Ondraw,我创建了自己的canvas类,它扩展了imageView。我的onDraw()方法提取用户的gps位置,每次用户移动时我都会调用这个onDraw方法。我的问题是我还想画一条gps轨迹,它只需要画一次(用户移动时不需要更新)。我想知道是否有可能有不止一种onDraw方法,或者是否有任何方法可以将1)用户位置和2)gps轨迹分开 我的理由是我不想浪费内存,每次用户的gps位置改变时,我都会重新绘制gps路线。这是一种浪费。你有没有看到性能受到影响?如果没有,不要担心。我认为这将是浪费CPU周期,如果
我的理由是我不想浪费内存,每次用户的gps位置改变时,我都会重新绘制gps路线。这是一种浪费。你有没有看到性能受到影响?如果没有,不要担心。我认为这将是浪费CPU周期,如果有什么。。。不是记忆。因此,如果应用程序看起来已经足够快了,就不用担心优化它
如果你的应用程序有点滞后,并且你发现轨迹是瓶颈。。。我建议将其缓存到位图中。这样,您仍然需要绘制轨迹,但不必计算每一帧上轨迹的坐标。好吧,假设我正确理解了您的问题,那么最多只能有1个onDraw方法。您需要考虑如何处理此问题的其他方法
@迪夫建议,这可能是一个解决方案。我最近不得不解决一个类似的问题,我将简要解释一下我所做的工作,以防有所帮助 您可以使用多个重叠视图,其中一个可能包含您不想经常重画的背景图形,另一个则包含经常更新的图形的前景视图。然后,为了获得性能,可以设计背景视图的
onDraw()
,使其由位图支持,然后将其保留为类变量。在背景图形的第一个onDraw()
中,对画布的绘制速度相对较慢。在对onDraw()
的后续调用中,只需将位图绘制到画布上即可
这是我自己做的。基本上,我的应用程序所做的就是显示一些图形仪表。这些仪表有许多只绘制一次的图形(仪表面、数字图例),以及需要随着模型数据的更改而反复绘制的指针图形。首先,我将背景图形和移动前景图形分割为单独的重叠视图。现在,使前景指针图形无效并重新绘制当然会导致其重叠的任何内容也无效,因此每次重新绘制指针视图时都会调用背景图形视图的onDraw()
方法。背景视图只需绘制一次背景图形,但保留了支持画布的位图,并在随后的onDraw()
调用中将此位图绘制回画布(这比最初使用Path()对象创建图形快得多)
Bitmap bm;
....
protected void onDraw(Canvas canvas){
if(null==bm){
bm=Bitmap.createBitmap(getMeasuredWidth(),getMeasuredHeight(),Bitmap.Config.ARGB_8888);
// do your slow vector graphics drawing to Canvas here
}
Paint drawPaint = new Paint();
drawPaint.setAntiAlias(false);
drawPaint.setFilterBitmap(false);
drawPaint.setDither(false);
canvas.drawBitmap(bm, 0, 0, drawPaint);
}