Android Wear - как нарисовать пользовательский интерфейс для усложнения TYPE_RANGED_VALUE - PullRequest
0 голосов
/ 05 июня 2018

Я ознакомился с примерами создания пользовательского циферблата Android 2.0 с поддержкой сложностей.В документе для ComplicationDrawable говорится, что мы можем предоставить пользовательские индикаторы выполнения и использовать setRangedValueProgressHidden () для подавления пользовательского интерфейса по умолчанию.

Не гарантируется, что дополнительные поля будут отображаться.Если вы хотите нарисовать свой собственный индикатор выполнения, вы можете использовать метод setRangedValueProgressHidden (), чтобы скрыть индикатор выполнения, предоставляемый классом ComplicationDrawable.

Но мне не удалось найти руководства о том, как рисовать пользовательский интерфейс после установки скрытой панели прогресса по умолчанию.Любые указатели будут высоко оценены.

1 Ответ

0 голосов
/ 06 июня 2018

Нет руководства, потому что нет единственного / предпочтительного способа сделать это.Вот несколько шагов, которые помогут вам начать работу:

1) Создайте Canvas и Bitmap, которые достаточно велики, чтобы содержать ваш пользовательский индикатор выполнения:

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);

2) Убедитесь, что у осложнения есть данные, которые нужно показать, и что это сложность с ранжированными значениями.(Вы можете получить доступ к данным усложнения из метода onComplicationDataUpdate(int complicationId, ComplicationData complicationData).):

if(complicationData != null && complicationData.getType() == ComplicationData.TYPE_RANGED_VALUE) {
    // TODO: Get progress data
}

3) Получить значения прогресса из вашего объекта ComplicationData (все эти поля обязательны для заполнения):

float minValue = complicationData.getMinValue();
float maxValue = complicationData.getMaxValue();
float currentValue = complicationData.getValue();

4) Нарисуйте прогресс на вашем Canvas так, как вы хотите.Ниже приведен упрощенный пример с одного из наших циферблатов.

// Calculate the start angle based on the complication ID. 
// Don't worry too much about the math here, it's very specific to our watch face :)
float startAngle = 180f + 22.5f + ((complicationId - 2) * 45f);

// Calculate the maximum sweep angle based on the number of complications.
float sweepAngle = 45;

// Translate the current progress to a percentage value between 0 and 1.
float percent = 0;
float range = Math.abs(maxValue - minValue);
if (range > 0) {
    percent = (currentValue - minValue) / range;

    // We don't want to deal progress values below 0.
    percent = Math.max(0, percent);
}

// Calculate how much of the maximum sweep angle to show based on the current progress.
sweepAngle *= percent;

// Add an arc based on the start and end values calculated above.
Path progressPath = new Path();
progressPath.arcTo(getScreenRect(), startAngle, sweepAngle);

// Draw it on the canvas.
canvas.drawPath(progressPath, getProgressPaint());

И вот конечный результат:

Portions watch face

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