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. Фактически я уже реализовал его таким образом, но на самом деле это не так. высокопроизводительное решение...

Я также думал об отправке текста с пробелами впереди, например:

  1. "___Привет, мир!"
  2. "__Привет, мир!"
  3. "_Привет, мир!"

но я хотел бы иметь большую детализацию движения.

Так есть ли у кого-нибудь идеи о том, как изменить "paddingLeft"?

1 ответ

Это довольно странный способ реализовать то, что известно как анимация, и для которого уже есть пример в документации Sony SmartWatch SDK.

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Вы не можете добиться плавной анимации на SmartWatch, потому что вы не управляете экраном, вы просто периодически отправляете данные для отображения на экране и отправляете их по назначению. Поэтому понятно, почему вы не можете добиться плавности, "частота обновления" слишком низкая.

Опять же: лучшая анимация, которую вы можете получить, это то, что вы найдете реализованной в документации, см. Приложение SimpleControl, это первое, что каждый должен увидеть в этой документации.

Другие вопросы по тегам