簡體   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