繁体   English   中英

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

[英]Getting Canvas.drawPaint not supported error while running an android app

我在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。 (忽略此会话)如何解决此问题?

将您的构造函数更改为

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM