Android:RoundRectShape:修改角半径

Android:RoundRectShape:修改角半径,android,ondraw,shapedrawable,Android,Ondraw,Shapedrawable,我有一个RoundRectShape,它是在视图的onDraw()函数中绘制的 通过覆盖的onTouchEvent函数(调用invalidate()强制调用onDraw()),此视图上的任何拖动操作都会修改此形状的角点 在onDraw中初始化变量时,Eclipse会显示一条警告,说明在绘制/布局操作期间避免对象分配(而是预分配和重用) 这一问题解释如下: 应避免在绘图或布局操作期间分配对象。它们经常被调用,因此平滑的UI可能会因对象分配导致的垃圾收集暂停而中断。 通常的处理方式是预先分配对象,并

我有一个
RoundRectShape
,它是在
视图的
onDraw()函数中绘制的

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

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

这一问题解释如下:

应避免在绘图或布局操作期间分配对象。它们经常被调用,因此平滑的UI可能会因对象分配导致的垃圾收集暂停而中断。

通常的处理方式是预先分配对象,并在每次绘图操作中重复使用对象

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

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

或者这仅仅是一种情况,在这种情况下,做最好的事情必须被做可能的事情所取代

谢谢


另外,在
onTouchEvent()
方法中调用构造函数将删除警告,但由于每次都通过
invalidate()
调用
onDraw()
,因此根本不需要使用
RoundRectShape
RoundRectShape
是不可变的,因此更改其值的唯一方法是使用反射。 通过调用
Canvas.drawRoundRect(RectF-rect、float-rx、float-ry、Paint-Paint)
方法,您可以轻松完成相同的绘图,而无需使用
RoundRectShape
。或者您可以查看
RoundRectShape
并在
onDraw()
方法中使用其代码

编辑: 关于
RoundRectShape
不是正确的方法以及对实现的看法是正确的。在实现之后,发现对以下对象的调用:

mPath.addRoundedRect() 
其变化允许角半径浮动作为输入()

在回答问题时:


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

我已经看过了绘制命令。我遇到的问题是,不是我形状的所有角都有相同的半径。我只能找到让他们保持一致的电话。这个实现链接是一个很好的建议,但是,谢谢。我没想到会有什么进展,但我喜欢这个主意。