Sony Smartwatch - динамически менять макет (paddingLeft)
Я хочу реализовать бегущий текст на часах, чтобы строка текста двигалась справа налево.
Лучший способ сделать это для меня - создать TextView с шириной экрана, установить там текст с максимальным paddingLeft, а затем уменьшить отступ, чтобы текст (несколько слов) переместился вправо к левый.
Поэтому мой вопрос: возможно ли динамически изменить атрибут "paddingLeft" TextView?
<TextView
android:id="@+id/scrollingText"
android:layout_width="@dimen/smart_watch_2_control_width"
android:layout_height="wrap_content"
android:paddingRight="@dimen/smart_watch_2_control_width"
android:text="Hello world!"
/>
Может быть что-то вроде:
Intent intent = new Intent(Control.Intents.CONTROL_SEND_LAYOUT_INTENT);
intent.putExtra(Control.Intents.EXTRA_LAYOUT_REFERENCE, layoutReference);
intent.putExtra(Control.Intents.EXTRA_PADDING_LEFT, paddingLeft);
controlExtension.sendToHostApp(intent);
Мне хорошо известно, что в Control.Intents нет ни CONTROL_SEND_LAYOUT_INTENT, ни EXTRA_PADDING_LEFT, а также того факта, что нечто подобное можно сделать с помощью CONTROL_PROCESS_LAYOUT_INTENT, но в документации есть примечание:
Обратите внимание, что расширение всегда должно отправлять макет, охватывающий весь экран в соответствии с размером экрана. Это означает, что даже если расширение хочет обновить часть экрана, в любом случае необходимо предоставить полноэкранный макет.
Так что в моем случае мне нужно было бы создать 220 одинаковых xml-файлов с той лишь разницей, что paddingLeft установлен на 220, 219, 218 и т. Д., И каждый раз устанавливать правильную разметку? Это звучит неправильно для меня:-)
Другой обходной путь - использовать ImageView вместо TextView и каждый раз преобразовывать текст в растровое изображение на хосте и отправлять обновление через "setImage" в Watch. Фактически я уже реализовал его таким образом, но на самом деле это не так. высокопроизводительное решение...
Я также думал об отправке текста с пробелами впереди, например:
- "___Привет, мир!"
- "__Привет, мир!"
- "_Привет, мир!"
но я хотел бы иметь большую детализацию движения.
Так есть ли у кого-нибудь идеи о том, как изменить "paddingLeft"?
1 ответ
Это довольно странный способ реализовать то, что известно как анимация, и для которого уже есть пример в документации Sony SmartWatch SDK.
ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Вы не можете добиться плавной анимации на SmartWatch, потому что вы не управляете экраном, вы просто периодически отправляете данные для отображения на экране и отправляете их по назначению. Поэтому понятно, почему вы не можете добиться плавности, "частота обновления" слишком низкая.
Опять же: лучшая анимация, которую вы можете получить, это то, что вы найдете реализованной в документации, см. Приложение SimpleControl, это первое, что каждый должен увидеть в этой документации.