Добрый вечер. Подскажите пожалуйста. Постараюсь максимально упростить пример. Мне нужно

отобразить на экране изменяющийся текст. Особенность в том, что когда текст становится пустым, он с анимацией должен исчезть, а когда снова станет не пустым, с анимацией появиться.
Пробую сделать просто через AnimatedVisibility (картинка 1), но в таком случае, анимации исчезания не видно, т.к. исчезает пустая строка.
Тогда я пытаюсь закешировать последний не пустой текст (картинка 2). Всё работает как надо, но MutableState тут избыточен
Заменяю на самописную обёртку - делегат, которая не вызывает рекомпозиии при изменении (картинка 3) Но начинает выглядеть весьма громоздко.
Как можно более изящно данную задачу решить?

12 ответов

6 просмотров
Марк- Автор вопроса
Марк
screenshot

1. .animateContentSize() 2. Сделать ширину через animateDpAsState, а просчитывать ширину через Paragraph() (в таком случае можно просчитывать ширину следующего текста, показать анимацию, и с задержкой показать новый текст)

Марк- Автор вопроса
Koor Desart
1. .animateContentSize() 2. Сделать ширину через a...

Проблема не в анимации размера между текстами, проблема в том, что если я анимирую скрытие текста, когда он становится пустым, то отображается анимация не последнего непустого текста, а текст переключается на пустой, а потом запускается анимация, которую не видно, из-за того, что анимируется пустой текст

Марк
Проблема не в анимации размера между текстами, про...

А если использовать задержку перед передачей нового текста

Марк- Автор вопроса
Koor Desart
А если использовать задержку перед передачей новог...

Уж лучше тогда моим способом, менее костыльно

Марк
Уж лучше тогда моим способом, менее костыльно

Я задержку с длиной одинаковой длине анимации не назвал бы костылем, не знаю

Марк- Автор вопроса
Magenta Soup
AnimatedContent не пробовали?

Он идеально подошёл бы, если бы я хотел бы анимаровать и между текстами тоже. А так я хочу анимировать только появление и исчезание текста

Марк- Автор вопроса
Koor Desart
Я задержку с длиной одинаковой длине анимации не н...

В таком случае мне придётся заботится о том, что бы эти длительности были бы всегда одинаковыми, к тому же задержку нужно будет ставить только перед пустым значением. Да и вообще задержки, это асинхронность, работа с корутинами или Flow, чего бы я не хотел делать внутри композа

Марк
screenshot

animatedContent попробуйте. а внутри контента условие if (needShow) { Text() } else { Box() }

Может попробовать что-нибудь в духе updateTransition(text).AnimatedVisibility({it.isNotEmpty()}) { Text(targetState) } ?

Марк- Автор вопроса
Alexander Sitnikov
Может попробовать что-нибудь в духе updateTransiti...

Спасибо, попробую, с этими штуками ещё не работал

Похожие вопросы

Обсуждают сегодня

Хтось використовував Vapor на Windows?
Jaroshevskii
15
Не знаю куда ещё обратиться, есть вопрос Допустим у нас существуют два устройства, которые обмениваются данными по сети (в целом не важно как именно, допустим это 2.4гг) Како...
Артем
5
подскажите, а как можно очистить экран с библиотекой POSIX-UEFI?
Vi Chapmann 🪙
11
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
6
это кластер, в смысле связность сети высокая, или это сотня хакнутых компов, на которых вертится взлом /etc/passwd ?
Д. П.
8
Нужен пулл реквест с хаммингберд + асинкхттпклиент или хаммингберд + юрлсессия?
Karl {🌪️}{🐊} Shinobi
8
Всем привет. Подскажите, почему не меняется значение поля при переключении сайта?
Alexander Peterikov
11
@spiridonov_dv скажите, у вас будет 1 дц или несколько? переход обработки в другой дц нужен? что будет в таком случае с tcp/tls соединениями? если только udp, то все равно ост...
Ilya
2
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Карта сайта