Android Wear OS Watch Face 支持不同的屏幕尺寸
Android Wear OS Watch Face Support different screen sizes
我在玩 Watch Faces for Wear OS
目前我已经创建
- 背景 320x320
- 刻度圈 320x320
- 时、分、秒针 320x40
在屏幕尺寸为 320x320 的圆形设备上一切正常
当我使用屏幕尺寸为 360x360 的设备时,事情变得复杂了。从下面的截图可以看出,Tick Circle 的大小并没有自动调整。
问题
我刚接触表盘开发,官网资料不多,请问我应该如何处理这些情况?
我是否应该为每个尺寸分别创建尺寸正确的图像并将其放入正确的文件夹中,例如:
- drawable-round-320dpi
- drawable-round-360dpi
- drawable-round-390dpi
或者是否有其他方法可以做到这一点,我不希望通过代码以编程方式调整图像大小,但如果这是我可以尝试的唯一解决方案。
这是我的游乐场项目源码code
P.S。任何文档、源代码都会非常有用。
在您上面的示例中,两种设备都属于 hdpi
密度范围,但屏幕尺寸仍略有不同。您可以使用 the minimum width qualifier 单独定位它们。但是,这将需要一些额外的资产来确保您涵盖所有可用的屏幕尺寸。
我个人更喜欢在代码中对资产进行简单的缩放操作。在运行时检查屏幕大小并将其用作可绘制对象(或位图)的边界。它可能看起来像这样:
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);
请确保您提供的资产足够大以容纳每个密度桶中的最大屏幕。只要您稍微缩小资产规模,就不会引起注意。
我在玩 Watch Faces for Wear OS
目前我已经创建
- 背景 320x320
- 刻度圈 320x320
- 时、分、秒针 320x40
在屏幕尺寸为 320x320 的圆形设备上一切正常
当我使用屏幕尺寸为 360x360 的设备时,事情变得复杂了。从下面的截图可以看出,Tick Circle 的大小并没有自动调整。
问题
我刚接触表盘开发,官网资料不多,请问我应该如何处理这些情况?
我是否应该为每个尺寸分别创建尺寸正确的图像并将其放入正确的文件夹中,例如:
- drawable-round-320dpi
- drawable-round-360dpi
- drawable-round-390dpi
或者是否有其他方法可以做到这一点,我不希望通过代码以编程方式调整图像大小,但如果这是我可以尝试的唯一解决方案。
这是我的游乐场项目源码code
P.S。任何文档、源代码都会非常有用。
在您上面的示例中,两种设备都属于 hdpi
密度范围,但屏幕尺寸仍略有不同。您可以使用 the minimum width qualifier 单独定位它们。但是,这将需要一些额外的资产来确保您涵盖所有可用的屏幕尺寸。
我个人更喜欢在代码中对资产进行简单的缩放操作。在运行时检查屏幕大小并将其用作可绘制对象(或位图)的边界。它可能看起来像这样:
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);
请确保您提供的资产足够大以容纳每个密度桶中的最大屏幕。只要您稍微缩小资产规模,就不会引起注意。