【问题标题】:How to optimize my code for drawing on canvas如何优化我的代码以在画布上绘图
【发布时间】:2013-01-03 11:58:04
【问题描述】:

在我的 android 应用程序中,我正在绘制许多矩形、线条和弧线 这经常会随着用户操作而改变。

现在我所做的是在 onDraw() 方法中创建我的 Paint 对象 以便它们保持局部变量并且不会导致任何内存问题。

但在代码审查期间,这被指出是一个错误。 我被告知这可能会减慢画布上的绘图速度,因为每次都会调用 new() onDraw() 被调用。所以我被要求将 Paint 对象作为类变量,只初始化它们一次,并且只在 onDraw() 中更改它们的属性,并在屏幕关闭/销毁时进一步使它们无效。

我想问这是正确的做法还是事情已经变得更好了,因为我没有发现我的屏幕上的 UI 很慢,我怀疑这可能是不必要的更改。

请提供建议。

【问题讨论】:

    标签: android canvas


    【解决方案1】:

    我发现在onDraw() 处理期间Paint paint = new Paint(); 存在延迟。我现在将paint 设为类变量,并在onDraw() 中简单地修改已构建的Paint 变量的属性。

        public void onDraw(Canvas canvas) {
            mPaint.setColor(Color.BLUE);
            ...
            mPaint.setStyle(Style.FILL); 
            ...
        }
    

    【讨论】:

    • 好吧,只要您执行new,就有一些时间来构造变量。如果该变量是一个成员变量并且已经构造了一次(例如,在onCreate()),那么该时间已经花费了。简单地更改mPaint 的属性并没有花费太多的 cpu 周期(我没有一个固定的数字,但我认为这是半明显的......我希望!)
    【解决方案2】:

    是的,您应该使用 Paint 作为类成员。 Paint的大小可能很小,我没有检查过,但它只是一个设置容器。

    在 Draw 中分配任何对象是个坏主意,因为它会导致 GC 启动并导致非常明显的故障,尤其是在旧设备上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多