Центр поиска проблем Android Wear Watchface

Снимок экрана после завершения моего кода введите здесь описание изображения

Я просмотрел все, но ничего не получилось. Каждый раз, когда я пытаюсь найти центр экрана для своего циферблата, он всегда оказывается немного выше центра и в крайнем правом углу экрана (это отличается от проблемы, которая была у исходного шаблона из Android Studio, где циферблат слегка приподнят и находится в крайнем левом углу экрана). Что я могу делать неправильно?

(Первый снимок экрана слева: Моя проблема. Второй снимок экрана: Исходная форма шаблона Android Wear из Android Studio)

@Override
    public void onDraw(Canvas canvas, Rect bounds) {
        if (isInAmbientMode()) {canvas.drawColor(Color.BLACK);
        }
        else {
            canvas.drawRect(0, 0, bounds.width(), bounds.height(), mBackgroundPaint);
        }

        // Draw H:MM in ambient mode or H:MM:SS in interactive mode.
        long now = System.currentTimeMillis();
        mCalendar.setTimeInMillis(now);
        int width = bounds.width();
        int height = bounds.height();
        float centerX = width / 2f;
        float centerY = height / 2f;

        String text = mAmbient
                ? String.format("%d:%02d", mCalendar.get(Calendar.HOUR),
                mCalendar.get(Calendar.MINUTE))
                : String.format("%d:%02d", mCalendar.get(Calendar.HOUR),
                mCalendar.get(Calendar.MINUTE));
        canvas.drawText(text, centerX, centerY, mTextPaint);
    }

Полный код можно найти здесь


person pancodemakes    schedule 01.12.2016    source источник


Ответы (2)


Насколько я могу судить из беглого взгляда на ваши источники, вы уже вычислили mTextXOffset и mTextYOffset, но не используете их для вызова отрисовки, поэтому источник текста находится в центре проблемного снимка экрана, а не в центре текста.

настройка centerX и centerY на mTextXOffset и mTextYOffset должна помочь.

person Christian R.    schedule 01.12.2016

Если вы рисуете текст, используя центральную точку, вы можете использовать

 mTextPaint.setTextAlign(Paint.Align.CENTER);

который будет рисовать из центра. В противном случае координата x представляет левую часть текста, который вы рисуете.

person Craig J    schedule 01.12.2016