【发布时间】:2012-07-17 11:50:05
【问题描述】:
我有一个RoundRectShape,它是在View 的onDraw() 函数中绘制的。
此形状的角会被此视图上的任何拖动操作通过重写的onTouchEvent 函数修改(该函数调用invalidate() 以强制调用onDraw())。
在onDraw 中初始化变量时,Eclipse 会显示警告说在绘制/布局操作期间避免对象分配(改为预分配和重用)。
这个问题解释如下:
您应该避免在绘图或布局操作期间分配对象。它们被频繁调用,因此流畅的 UI 可能会因对象分配导致的垃圾收集暂停而中断。
一般的处理方式是预先分配对象,并为每个绘图操作重用它们
为此,我显然必须能够修改构造函数中设置的角半径。 RoundedRectShape class 没有提供设置器(我很确定相关的成员变量是不可访问的)。
我知道这是一个小对象和一个小问题,但是当类提供的用于设置圆角半径的唯一方法是通过构造函数时,如何在不重新初始化对象的情况下更改这些角?
或者这只是一种情况,做最好的事情必须用做可能的事情来代替?
谢谢,
附:在 onTouchEvent() 方法中调用构造函数将删除警告,但由于每次都通过 invalidate() 调用 onDraw() 无论如何都不会完成任何事情
【问题讨论】:
标签: android ondraw shapedrawable