我正在创建一个自定义视图,该视图使用画布绘制带有圆角的简单线条,而我无法获得角落中的线条具有与笔直部分相同的粗细。 路径是在onSizeChanged方法中定义的。
这是我的看法:
这是视图
x1 <- as.character(c("Apple", "Banana", "Cat", "Dog", "Orange"))
x2 <- as.character(c("Banana", "Orange", "Dog", "Cat", "Apple"))
x3 <- as.character(c("Orange", "Apple", NA, NA, "Banana"))
groups <- data.frame(x1, x2, x3, stringsAsFactors=FALSE)
答案 0 :(得分:2)
我弄清楚了,我是沿着画布的边缘画的,只显示了一半的线条。我将线从边缘移了一点,它正在起作用
答案 1 :(得分:2)
使用画布绘制时,必须考虑视图填充。 onSizeChanged方法可为您提供视图和高度,而无需填充。要填充,您可以在View类中使用getPaddingTop()
,getPaddingBottom()
,getPaddingStart()
和getPaddingEnd()
函数。
这就是考虑填充的代码:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int realWidth = w - (getPaddingStart() + getPaddingEnd());
int realHeight = h - (getPaddingTop() + getPaddingBottom());
if (mBitmap == null) {
RectF rectf = new RectF(realWidth - realWidth / 2, realHeight - realWidth / 2, realWidth, realHeight);
mPath.moveTo(realWidth, getPaddingTop());
mPath.lineTo(realWidth, realHeight - realWidth / 2);
mPath.arcTo(rectf, 0, 90);
mPath.lineTo(getPaddingStart(), realHeight);
mBitmapPaint.setAntiAlias(true);
mBitmapPaint.setDither(true);
mBitmapPaint.setColor(context.getResources().getColor(R.color.siminn_warm_gray));
mBitmapPaint.setStyle(Paint.Style.STROKE);
mBitmapPaint.setStrokeWidth(5);
}
}