运行Android应用时出现Canvas.drawPaint不支持的错误

时间:2019-02-01 06:12:45

标签: android android-canvas

我在Android代码中使用canvas。如下所示:

public class RecognitionScoreView extends View {
    private static final float TEXT_SIZE_DIP = 24;
    private List<Recognition> results;
    private final Paint fgPaint;
    private final Paint bgPaint;

    private static String TAG = RecognitionScoreView.class.getSimpleName();

    public RecognitionScoreView(final Context context, final AttributeSet set) {
        super(context, set);

        float textSizePx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, TEXT_SIZE_DIP, getResources().getDisplayMetrics());
        fgPaint = new Paint();
        fgPaint.setTextSize(textSizePx);

        bgPaint = new Paint();
        bgPaint.setColor(0xcc4285f4);
    }

    public void setResults(final List<Recognition> results) {
        this.results = results;
        Log.i(TAG, "setResults: Results are " + results);
        postInvalidate();
    }

    @Override
    public void onDraw(final Canvas canvas) {
        final int x = 10;
        int y = (int) (fgPaint.getTextSize() * 1.5f);

        canvas.drawPaint(bgPaint);

        if (results != null) {
            for (final Recognition recog : results) {
                canvas.drawText(recog.getTitle(), x, y, fgPaint);
                Log.i(TAG, "onDraw: Object is -- " + recog.getTitle());
                Log.i(TAG, "onDraw: Object location is -- " + recog.getLocation());
                Log.i(TAG, "onDraw: Object id is -- " + recog.getId());
                y += fgPaint.getTextSize();
            }
        }
       /* if (results != null) {
            Intent intent = new Intent(context, ResultActivity.class);
            context.this.startActivity(intent);

        }*/
    }
}  

运行代码时,出现此错误:

  

不支持Canvas.drawPaint。 (忽略此会话)如何   解决这个问题?

1 个答案:

答案 0 :(得分:0)

将构造函数更改为

public RecognitionScoreView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, set);

    float textSizePx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, TEXT_SIZE_DIP, getResources().getDisplayMetrics());
    fgPaint = new Paint();
    fgPaint.setTextSize(textSizePx);

    bgPaint = new Paint();
    bgPaint.setColor(0xcc4285f4);
}

我认为bgPaint存在问题,在某些情况下不会调用您的构造函数。结果 bgPaint == null ,如果您覆盖链中的最后一个构造器,则将初始化bgPaint