我想为 View 添加边框,边框宽度、颜色、半径可以由用户设置。所以我试着为它画一个矩形。我用drawRoundRect画的时候,拐角处的线不平滑,比其他地方粗。我不知道如何修复它。请给我一些指示。有没有其他方法可以做到?我必须使用代码来绘制它。
非常感谢。
附加代码:矩形的红角。
过去的代码:
public class MPCTextView extends TextView {
// private Context context;
private final static String TAG = "MPCTextView";
public final static int DEFAULT_BACKGROUND_COLOR = Color
.parseColor("#28FF28");
public final static int DEFAULT_BORDER_COLOR = Color.parseColor("#FF0000");
public int mBoderWidth = 2;
public int mBoderColor;
public int mBoderRadius = 20;
public int mbackgroundColor;
public boolean isHaveBorder = true;
public boolean isHaveBackground = true;
RectF mRectF = new RectF();
Rect mRec = new Rect();
Paint mPaint = new Paint();
public MPCTextView(Context context) {
super(context);
// this.context = context;
}
@Override
protected void onDraw(Canvas canvas) {
// try to add a boder for this view.
canvas.getClipBounds(mRec);
// draw background
// canvas.drawColor(mbackgroundColor);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setColor(DEFAULT_BACKGROUND_COLOR);
if (mBoderRadius > 0) {
mRectF.set(mRec);
canvas.drawRoundRect(mRectF, mBoderRadius, mBoderRadius, mPaint);
} else {
canvas.drawRect(mRec, mPaint);
}
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mBoderWidth);
mPaint.setColor(DEFAULT_BORDER_COLOR);
mPaint.setAntiAlias(true);
if (mBoderRadius > 0) {
mRectF.set(mRec);
canvas.drawRoundRect(mRectF, mBoderRadius, mBoderRadius, mPaint);
} else {
canvas.drawRect(mRec, mPaint);
}
super.onDraw(canvas);
}
最佳答案
问题的核心是填充,而不是抗锯齿。拐角不是更粗,而是正常宽度。但是,直线被剪裁了。
如果将笔画宽度设置为 2,则真正的直线宽度为 1,因为笔画是矩形,轴是线 x = 0。这意味着矩形是 (left=0,up=-1,right=length, bottom=1),但是 up -1 在 Canvas 之外,所以不会被绘制。角是全宽的,因为它在 Canvas 中。
所以,你只需要设置填充。
这是使圆形矩形完全在 Canvas 内绘制的代码:
float pad = 1f;
mRectF.set(new RectF(mRec.left + pad, mRec.top + pad, mRec.right - pad, mRec.bottom - pad));
canvas.drawRoundRect(mRectF, mBoderRadius, mBoderRadius, mPaint);
关于android - 如何让边框更平滑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17750329/