Android:RoundRectShape:修改角半径

时间:2012-07-15 08:47:05

标签: android ondraw shapedrawable

我在RoundRectShape的{​​{1}}函数中绘制了View

此形状的角可通过覆盖的onDraw()函数(调用onTouchEvent强制调用invalidate())来修改此视图上的任何拖动操作。

onDraw()初始化变量时,Eclipse会显示一条警告,说明在绘制/布局操作期间避免对象分配(预分配和重用)

此问题解释如下:

您应避免在绘图或布局操作期间分配对象。这些是经常调用的,因此可以通过对象分配导致的垃圾收集暂停来中断平滑的UI。

通常处理此方法的方法是预先分配对象并为每次绘图操作重复使用

要做到这一点,我显然必须能够修改构造函数中设置的角半径。 RoundedRectShape class没有提供setter(我很确定相关的成员变量不可访问)。

我知道它是一个小对象和一个小问题,但是当类提供设置圆角半径的唯一方法是通过构造函数时,如何在不重新初始化Object的情况下更改这些角?

或者这只是一个必须用尽可能做的事情来取代做最好事情的情况?

谢谢,

P.S。在onDraw方法中调用构造函数将删除警告,但由于每次通过onTouchEvent()调用onDraw()

,因此完全没有任何结果

1 个答案:

答案 0 :(得分:1)

我认为您根本不需要使用RoundRectShapeRoundRectShape是不可变的,因此更改其值的唯一方法是使用反射。 您可以直接调用Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint)方法轻松完成相同的抽奖,而无需使用RoundRectShape。或者,您可以查看RoundRectShape implementation,并在onDraw()方法中使用其代码。

修改 关于RoundRectShape不是正确的方式来看待实施的评论是正确的。执行后发现了一个调用:

mPath.addRoundedRect() 

有一个允许角半径浮动作为输入(Path.addRoundRect

的变体

在回答问题时:

使用路径而不是形状作为变量,并在必要时将新的圆角矩形绘制到路径