我有一个UIBezierPath弧:
public class DividerDecoration extends RecyclerView.ItemDecoration {
private final Paint mPaint;
private int mHeightDp;
public DividerDecoration(Context context) {
this(context, Color.argb((int) (255 * 0.2), 0, 0, 0), 1f);
}
public DividerDecoration(Context context, int color, float heightDp) {
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL);
mPaint.setColor(color);
mHeightDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, heightDp, context.getResources().getDisplayMetrics());
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view);
int viewType = parent.getAdapter().getItemViewType(position);
if (viewType == MY_VIEW_TYPE) {
outRect.set(0, 0, 0, mHeightDp);
} else {
outRect.setEmpty();
}
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
for (int i = 0; i < parent.getChildCount(); i++) {
View view = parent.getChildAt(i);
int position = parent.getChildAdapterPosition(view);
int viewType = parent.getAdapter().getItemViewType(position);
if (viewType == MY_VIEW_TYPE) {
c.drawRect(view.getLeft(), view.getBottom(), view.getRight(), view.getBottom() + mHeightDp, mPaint);
}
}
}
}
后来我试图将cornerRadius设置为它:
drawLayer.path = UIBezierPath(arcCenter: <CGPoint>, radius: <CGFloat>, startAngle: <CGFloat>, endAngle: <CGFloat>, clockwise: <Bool>)
它有这样的方法,但为什么它没有实现呢???
我甚至设置了
drawLayer.cornerRadius = 10
它也没有帮助:它没有改变路径的半径。
答案 0 :(得分:1)
drawLayer.path
和drawLayer.cornerRadius
是两种不同的结构。
cornerRadius
是CALayer
本身的属性(使其边缘变圆,如在roundRect中)。
您尝试更改的是创建后路径的半径,您无法执行此操作:
drawLayer.path.radius // does not exist
UIBezierPath(arcCenter...)
是一种便捷方法,可以创建一个包含控制点的路径,而不是实际的arc
对象。
<强>解决方案强>
如果你想要一个不同的弧,创建一个新的弧,然后根据需要改变路径,使用newR作为更新的半径:
drawLayer.path = UIBezierPath(arcCenter: aPt,
radius: newR,
startAngle: alpha,
endAngle: omega,
clockwise: b)