自定义视图:Canvas 绘制方法给出 API 错误

Custom View: Canvas draw methods give API error

我创建了一个自定义视图并覆盖了 onDraw 方法。

但是,Android Studio 说我的 canvas.drawOvalcanvas.drawArc 调用要求我将我的最小值 API 设置为 21。

Canvas 从 API 1 开始就存在了,对吗?

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.Button;

public class PieButton extends Button {

    float progress = 0f;

    public PieButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void onDraw(Canvas canvas) {
        Paint paint = new Paint();

        paint.setStyle(Paint.Style.FILL);
        paint.setColor(0xFF00C853);  
        canvas.drawOval(0, 0, getWidth(), getHeight(), paint);

        paint.setStyle(Paint.Style.FILL);
        paint.setColor(0xFF000000);
        canvas.drawArc(0, 0, getWidth(), getHeight(), 0f, progress*(-360), true, paint);
    }

    public void setProgress (float inputProgress) {
        progress = inputProgress;
    }
}

我收到的错误信息是:

Call requires API level 21 (current min is 16): android.graphics.Canvas#drawOval less... (Ctrl+F1)

您在 canvas 中使用的 drawOval() 方法已添加到 API 21.

public void drawOval (float left, float top, float right, float bottom, Paint paint) - API 21.

您应该尝试使用带有 RectF 参数的 drawOval()。

public void drawOval (RectF oval, Paint paint) - API 1

同样适用于 drawArc()。使用带 RectF 参数的 drawArc。

public void drawArc (RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint) - API 1

canvas.drawOval(0, 0, getWidth(), getHeight(), paint); 正在 API 级别 21 中添加。参见 API 调用 here

如果你想在 api 级别上绘制椭圆,最低级别低于 21,你应该按以下方式使用它,

RectF rect=new RectF(0, 0, getWidth(), getHeight());

public void drawOval (rect, paint);