Android:RoundRectShape:修改角半径

问题描述:

我有一个RoundRectShape,它是在ViewonDraw()函数中绘制的。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来轻松完成相同的绘制。或者您可以查看RoundRectShapeimplementation,并在您的onDraw()方法中使用其代码。

编辑: 的意见约RoundRectShape不是正确的方式去寻找实施是正确的。继实施来找到一个电话:

mPath.addRoundedRect() 

它拥有一个变化允许浮动圆角半径为输入(Path.addRoundRect

在回答这个问题:

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

+0

我已经看过那个绘图命令。我在那里的问题是,我的形状不是所有的角都有相同的半径。而且我只能找到那个设置它们的调用。这个实现链接是一个很好的建议,但是,谢谢。我没有想到真的会得到这个,但我喜欢这个想法。 – 2012-07-17 03:19:53