我正在编写一个应用程序来绘制一些数据(地铁数据 map ),并且当用户触摸屏幕时可以移动/缩放 map 。
现在我使用View来绘制 map ,当调用onDraw(Canvas canvas)
时, map 正在Canvas中绘制。
我在调用 onTouchEvent
时计算平移 x/y 和比例,然后调用 invalidate()
刷新 map 。
onDraw
方法如下所示:
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.translate(nowPosX, nowPosY);
canvas.scale(mScaleFactor, mScaleFactor);
canvas.drawColor(Color.WHITE);
for (Subways.Line line : subwayData.getLineList()) {
for (Subways.Line.Stations:line.getStationList) {
canvas.drawLine();
canvas.drawText();
canvas.drawCircle();
}
}
canvas.restore();
super.onDraw(canvas);
}
但我现在有一个问题。每次移动/缩放 map 时,我都需要重新绘制所有内容,并且数据非常多并且花费大量时间。当我移动/缩放 map 时,它会变慢。
我尝试先在位图上绘制,然后在每次调用 onDraw
时移动/缩放位图。但如果位图很小,当我缩放时它会看起来很模糊。如果位图很大,可能会导致OutOfMemoryError
。
有什么办法可以解决我的问题吗?
最佳答案
在某些较旧的 Android 版本上,您可以通过一次绘制所有位图和一次绘制所有文本来提高性能。另一种可能性是为您拥有的每个文本创建一个路径,缓存它们并在每次需要重绘时使用缓存来绘制路径。
关于android - 如何避免在onDraw上花费很长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27467747/