【问题标题】:drawRoundRect in Android not workingAndroid中的drawRoundRect不起作用
【发布时间】:2017-01-12 05:32:50
【问题描述】:

我想在Android中用drawRoundRect方法画一个圆角矩形。

void drawRoundRect (RectF rect, float rx,  float ry, Paint paint)

我使用的是 Android Studio,我的测试设备使用的是 Android 6.0.1,API 23

这是我的代码的一部分。当我在 rx 和 ry 中输入零时,它会起作用。

public void draw(Canvas canvas){
        canvas.drawColor(Color.WHITE);
        canvas.drawRoundRect(rect, 0, 0, pnt);
}

这会在我的屏幕上绘制一个黑色矩形。

但是当我尝试使它变圆时,

public void draw(Canvas canvas){
        canvas.drawColor(Color.WHITE);
        canvas.drawRoundRect(rect, 10, 10, pnt);
}

它什么也没画。这只会绘制白色背景....

我在 rx 和 ry 中尝试了不同的数字,例如 100、3、5、0.03f 等,

但任何大于 0 的数字都会使 drawRoundRect() 不起作用。

我的代码有什么问题吗...?

【问题讨论】:

  • 嘿!你找到解决办法了吗?

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


【解决方案1】:

确保用于绘制圆角矩形的 RectF 中的坐标正确。这意味着:rect.left < rect.rightrect.top < rect.bottom

Android 7 似乎自己纠正了错误的坐标并绘制了所需的圆角矩形,但如果坐标有问题,Android 6 什么也不绘制。

【讨论】:

  • 这个!相同的代码在更高版本的 Android 上可以很好地绘制矩形,但在 6 上会中断。
【解决方案2】:

你可以试试这个,我们有一点计算,但效果很好

private void drawRoundedRect(Canvas canvas, float left, float top, float right, float bottom) {
    float radius = getHeight() / 2;
    canvas.drawCircle(radius, radius, radius, mainPaint);
    canvas.drawCircle(right - radius, radius, radius, mainPaint);
    canvas.drawRect(left + radius, top, right - radius, bottom, mainPaint);
}

或者你可以检查一下

RectF rect = new RectF(10,10,20,20);
canvas.drawRoundRect(rect , 0, 0, mPaint);

【讨论】:

    【解决方案3】:

    试试这个,

    Bitmap bitmap = Bitmap.createBitmap(
                            600, // Width
                            300, // Height
                            Bitmap.Config.ARGB_8888 // Config
                    );
    
                    Canvas canvas = new Canvas(bitmap);
                    canvas.drawColor(Color.WHITE);
                    Paint paint = new Paint();
                    paint.setStyle(Paint.Style.FILL);
                    paint.setColor(Color.RED);
                    paint.setAntiAlias(true);
    
                    int offset = 50;
                    RectF rectF = new RectF(
                            offset, // left
                            offset, // top
                            canvas.getWidth() - offset, // right
                            canvas.getHeight() - offset // bottom
                    );
                    int cornersRadius = 25;
                    canvas.drawRoundRect(
                            rectF, // rect
                            cornersRadius, // rx
                            cornersRadius, // ry
                            paint // Paint
                    );
                    mImageView.setImageBitmap(bitmap);
    

    【讨论】:

      【解决方案4】:

      你可以这样做,

      RectF rect = new RectF(0f, 0f, width, height);

      canvas.drawRoundRect(rect , 0, 0, mPaint);

      【讨论】:

        猜你喜欢
        • 2015-12-25
        • 2013-08-07
        • 1970-01-01
        • 1970-01-01
        • 2018-06-18
        • 2011-06-18
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多