Android Wear Watch Face: альтернатива onDraw() в WatchFaceService?
Как объяснено здесь ( 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 ответа
В onCreateEngine() вашего WatchFaceService получите инфлятор:
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 не ожидал, что разработчики захотят отобразить часы на циферблате!
Вы правы, вы должны использовать Canvas или OpenGL. Ссылка, которую вы дали, объяснила старый обходной путь, работающий для версии до 5.0. Теперь вы должны использовать новый API.