自定义视图:Canvas绘制方法会产生API错误

jim*_*jim 2 android android-canvas android-view android-studio

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

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

从API 1开始,Canvas一直存在吗?

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

调用需要API级别21(当前最小值为16):android.graphics.Canvas#drawOval less ...(Ctrl + F1)

dis*_*oom 15

您在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().将drawArc与RectF参数一起使用.

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