2015-08-10 10 views
2

Я пытаюсь несколько способов центрировать 3 строки текста на часах и, похоже, не может понять это. Новые службы сторожевых украшений требуют, чтобы вы рисовали на холсте. Я инициализировать смещение текста, захватывая длину текста каждой строки и деления на 2.Текст центра на Watch

mXDateOffset = mTextDateColorPaint.measureText("May 21, 2015") /2; 
mXTimeOffset = mTextTimeColorPaint.measureText("12:00:00")/2; 
mXBatteryOffset = mTextBatteryColorPaint.measureText("99%") /2 ; 

Затем, когда я установил текст и краски элементы холста я нахожу в центре прямоугольника (экран) минус чтобы найти начальную позицию текста.

canvas.drawText(timeText, bounds.centerX() - mXTimeOffset, 40.0f, mTextTimeColorPaint); 
canvas.drawText(date, bounds.centerX() - mXDateOffset, 90.0f, mTextDateColorPaint); 
canvas.drawText(mBatteryLevel, bounds.centerX() - mXBatteryOffset, 130.0f, mTextBatteryColorPaint); 

Что я получаю это ...

enter image description here

Не уверен, что еще делать.

+0

, который кажется очень хорошо сосредоточенным для меня, только не для фактического текста, который вы рисуете. «4: 39: 41» не имеет такой же длины, как «12: 00: 00». Я не понимаю, почему вы использовали бы другой текст для измерения и рисования. – njzk2

+0

Исходные условия по умолчанию ... – JPM

+0

, тогда вам просто нужно изменить значение смещения в соответствии с тем, что вы хотите нарисовать ... – njzk2

ответ

7

Существует много, что вошел в этот ответ, вот что я придумал с того, чтобы получить доступ к методам OnDraw:

в OnCreate() установите Смещения

mYTimeOffset = getResources().getDimension(R.dimen.y_offset); 
mYDateOffset = getResources().getDimension(R.dimen.y_date_offset); 
mYBatteryOffset = getResources().getDimension(R.dimen.y_battery_offset); 

затем вызвать drawtime и установить параметры холста

private void drawTimeText(Canvas canvas, Rect bounds) { 
     String timeText = getHourString() + ":" + String.format("%02d", mDisplayTime.minute); 
     if(isInAmbientMode() || mIsInMuteMode) { 
      timeText += (mDisplayTime.hour < 12) ? "AM" : "PM"; 
     } else { 
      timeText += String.format(":%02d", mDisplayTime.second); 
     } 

     String date = new SimpleDateFormat(DATE_FORMAT_DISPLAYED).format(Calendar.getInstance().getTime()); 
     canvas.drawText(timeText, bounds.centerX() - (mTextTimeColorPaint.measureText(timeText))/2, mYTimeOffset, mTextTimeColorPaint); 
     canvas.drawText(date, bounds.centerX() - (mTextDateColorPaint.measureText(date))/2, mYDateOffset, mTextDateColorPaint); 
     if (mBatteryLevel != null) 
     canvas.drawText(mBatteryLevel, bounds.centerX() - (mTextBatteryColorPaint.measureText(mBatteryLevel))/2, mYBatteryOffset, mTextBatteryColorPaint); 
    }