Android:RoundRectShape:修改角半径
我有一个RoundRectShape
,它是在View
的onDraw()
函数中绘制的。Android:RoundRectShape:修改角半径
该形状的角是通过在此视图中任何拖动操作通过一个重写onTouchEvent
函数(它调用invalidate()
到呼叫强制onDraw()
)改性。
当初始化onDraw
中的变量时,Eclipse显示一条警告消息在绘制/布局操作期间避免对象分配(改为预分配和重用)。
这个问题解释如下:
你应该避免图纸或布局操作过程中分配对象。这些被频繁调用,所以一个流畅的UI可以被对象分配造成的垃圾收集暂停中断。
这是一般处理方式是分配对象的前面和重用他们为每个绘图操作
要做到这一点,我显然必须能够修改圆角半径在构造函数中设置。 RoundedRectShape class没有提供setter(我很确定相关的成员变量是不可访问的)。
我知道这是一个小对象和一个小问题,但是如何在不重新初始化对象的情况下更改这些边角?当类提供的设置圆角半径的唯一方法是通过构造函数?
或者这只是一个情况,做最好的事情将不得不被替换做可能的事情?
谢谢,
P.S.在调用该方法onTouchEvent()
的构造将删除警告,但实现绝对没有因事实上onDraw()
被称为每次通过invalidate()
反正
我觉得你不需要使用RoundRectShape
可言。 RoundRectShape
是不可变的,因此改变其值的唯一方法是使用反射。 您可以通过直接调用Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint)
方法而无需使用RoundRectShape
来轻松完成相同的绘制。或者您可以查看RoundRectShape
implementation,并在您的onDraw()
方法中使用其代码。
编辑: 的意见约RoundRectShape
不是正确的方式去寻找实施是正确的。继实施来找到一个电话:
mPath.addRoundedRect()
它拥有一个变化允许浮动圆角半径为输入(Path.addRoundRect)
在回答这个问题:
使用路径,而不是一个形状作为变量并在必要时将新的圆角矩形绘制到路径上
我已经看过那个绘图命令。我在那里的问题是,我的形状不是所有的角都有相同的半径。而且我只能找到那个设置它们的调用。这个实现链接是一个很好的建议,但是,谢谢。我没有想到真的会得到这个,但我喜欢这个想法。 – 2012-07-17 03:19:53