在画布上绘制时,路径弧比线弧粗

时间:2019-01-10 15:32:21

标签: android android-canvas android-custom-view

我正在创建一个自定义视图,该视图使用画布绘制带有圆角的简单线条,而我无法获得角落中的线条具有与笔直部分相同的粗细。 路径是在onSizeChanged方法中定义的。

这是我的看法:

Line

这是视图

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)

2 个答案:

答案 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);
        }
    }