android - 如何避免在onDraw上花费很长时间?

标签 android bitmap android-canvas android-view ondraw

我正在编写一个应用程序来绘制一些数据(地铁数据 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/

相关文章:

java - 如何在EditText中添加数字分隔符

android - 将纯文本从 Android 库发送到 Android 项目

android - 下采样后图像看起来模糊

android - 如何在 Android 中获取类似波形的声云

android - "Your Android App Bundle uses an upload certificate with a key that is too weak."

c# - MVVMCross Messenger 插件安卓

android - 截图

C++如何创建位图文件

android - 如何在触摸事件中移动 Canvas 中的 ShapeDrawable

android - 无法在 surfaceview 上绘制,因为 Canvas 为空