Android Wear Watch Face:WatchFaceService中的onDraw()替代方案?

时间:2015-01-01 12:15:11

标签: android wear-os watch-face-api

如此处所说(https://developer.android.com/training/wearables/watch-faces/service.html)绘制表盘我必须使用方法OnDraw,是吗?没有其他选择吗?

这是一个玩笑吗?没有来自xml管理的布局?没有dpi管理?没有屏幕格式管理?等等?

确实

请告诉我,我错了!

PS此页面(http://www.binpress.com/tutorial/how-to-create-a-custom-android-wear-watch-face/120)使用正常活动制作表盘,是否正确?

2 个答案:

答案 0 :(得分:6)

在WatchFaceService的onCreateEngine()中,获取inflater:

mInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

然后在你的引擎的onCreate()中,夸大你的布局:

mFrameLayout = (FrameLayout) mInflater.inflate(R.layout.main, null);

然后在onDraw(),测量,布局和绘制视图:

        //Measure the view at the exact dimensions (otherwise the text won't center correctly)
        int widthSpec = View.MeasureSpec.makeMeasureSpec(bounds.width(), View.MeasureSpec.EXACTLY);
        int heightSpec = View.MeasureSpec.makeMeasureSpec(bounds.height(), View.MeasureSpec.EXACTLY);
        mFrameLayout.measure(widthSpec, heightSpec);

        //Lay the view out at the rect width and height
        mFrameLayout.layout(0, 0, bounds.width(), bounds.height());

        mFrameLayout.draw(canvas);

不要指望使用TextClock执行此操作。它在Android Wear上不存在。显然,Google并没有预料到开发人员会希望在表盘上显示时钟!

答案 1 :(得分:1)

你是对的,你必须使用Canvas或OpenGL。 您提供的链接解释了适用于5.0之前版本的旧解决方法。 现在,您必须使用新的API。