Как это сделать, требует большего количества ввода или требований, прежде чем давать какие-либо предложения.Помимо проблем с производительностью, следует учитывать и возможность сопровождения кода.
Основываясь на моем опыте.С высококлассными телефонами и высоким уровнем API (около> = 21), они имеют лучшее оборудование, эффективный способ управления памятью и фоновые задачи.Упомянутая вами проблема expensive to redraw
кажется не слишком важной с простой анимацией.В этой ситуации обслуживаемость кода имеет более высокий приоритет, я решу иметь дополнительный контейнер FrameLayout
, обернуть View
с такой же анимацией, потому что у вас меньше кода => меньше логики.0 или 2 FrameLayout
не имеют заметных различий в производительности в этом случае
Об устройствах низкого уровня: если вы хотите настроить таргетинг на пользователей с более низким API, производительность становится главным приоритетом.Теперь оба упомянутых вами случая влияют на производительность: для хранения большего количества View
требуется больше памяти, а для запуска анимации требуется больше ресурсов процессора.Пришло время для компромисса.В вашем случае, когда у вас есть 2 анимации перевода, запущенные на любом элементе в RecyclerView
, я предпочитаю создавать 2 отдельные анимации, запускаемые на 2 View
.Таким образом, я могу сохранить кучу дополнительных контейнеров => сохранить память, анимация не запускается для всех элементов, поэтому она влияет на процессор только в течение небольшого промежутка времени во время анимации.
Итак, подведем итог, У вас свой подход к каждому случаю, выберите приоритет для случая, который вы выбрали, улучшите его, пожертвуйте другими, которые меньше влияют на общую проблему.Ни одно решение не является идеальным на 100%, компромисс всегда возникает ситуация при кодировании