Android Wear OS Watch Face Поддержка разных размеров экрана - PullRequest
0 голосов
/ 21 июня 2019

Я играю вокруг Watch Faces для Wear OS

В настоящее время я создал

  • Фон 320х320
  • Tick Circle 320x320
  • Часы, минуты и секунды. Руки 320х40

Все отлично работает на круглых устройствах с размером экрана 320x320

enter image description here

Ситуация усложняется, когда я использую устройства с размерами экрана 360x360. Как вы можете видеть на скриншоте ниже, размер Tick Circle не регулируется автоматически.

enter image description here

Вопрос

Поскольку я новичок в разработке Watch Faces, и на официальном веб-сайте документации об этом не так много информации, я хочу понять, как мне следует обращаться с этими случаями?

Должен ли я создать для каждого размера отдельное изображение с правильным размером и поместить его в нужную папку, например:

  • рисуем круглый-320dpi
  • рисуем круглый-360dpi
  • рисуем круглый-390dpi

Или есть какой-то другой способ сделать это, я бы предпочел не изменять размеры изображений программно из кода, но если это единственное решение, которое я могу попробовать.

Вот источник проекта моей игровой площадки код

P.S. Любая документация, исходный код будет очень полезна.

1 Ответ

1 голос
/ 21 июня 2019

В приведенном выше примере оба устройства попадают в область плотности hdpi, но размер экрана все еще немного отличается.Вы можете выбрать их по отдельности, используя квалификатор минимальной ширины .Однако для этого потребуется ряд дополнительных ресурсов, чтобы обеспечить охват всех доступных размеров экрана.

Лично я предпочитаю просто выполнить простую операцию масштабирования актива в коде.Проверьте размер экрана во время выполнения и используйте его в качестве границ для рисования (или растрового изображения).Это может выглядеть примерно так:

DisplayMetrics displayMetrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
Rect screenBounds = new Rect(0, 0, width, height);

Drawable faceMarkers = context.getDrawable(R.drawable.face_markers);
faceMarkers.setBounds(screenBounds);

faceMarkers.draw(canvas);

Убедитесь, что вы предоставили ресурс, который достаточно велик для самого большого экрана в каждом сегменте плотности.Пока вы немного уменьшаете свой актив, это не должно быть заметно.

...