Центр поиска проблем 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);
}
Полный код можно найти здесь
2 ответа
Насколько я могу судить по беглому взгляду на ваши источники, вы уже рассчитали mTextXOffset
а также mTextYOffset
но не используйте его для вызова при рисовании, поэтому происхождение текста центрируется на вашем проблемном скриншоте, а не в центре текста.
поправляя centerX
а также centerY
от mTextXOffset
а также mTextYOffset
должен сделать свое дело.
Если вы рисуете текст, используя центральную точку, вы можете использовать
mTextPaint.setTextAlign(Paint.Align.CENTER);
который будет рисовать из центра. В противном случае координата x представляет левую часть текста, который вы рисуете.