Получение Canvas.drawPaint не поддерживается ошибка при запуске приложения для Android - PullRequest
0 голосов
/ 01 февраля 2019

Я использую canvas в моем коде Android.Это как указано ниже:

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 голосов
/ 01 февраля 2019

измените ваш конструктор на

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 , если вы переопределите последний constrctructor в цепочке, то bgPaint будет инициализирован

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...