Как эффективно перевести группу взглядов? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть базовый макет, который содержит несколько видов.Мне нужно перевести их вдоль оси х.В основном, существует 2 типа переводов, один из которых следует за пальцем полностью, и тот, который останавливается после определенного порога, что дает хороший эффект, похожий на параллакс.

Так что лучше поместить группу представленийчто разделяет ту же логику перевода внутри другого контейнера и переводит контейнер или переводит каждое представление отдельно?

Я знаю, что это может звучать странно, но Google всегда рекомендует использовать иерархию плоских представлений, потому что вложенные макеты слишком дороги для перерисовки, значит ли это, что лучше хранить только один слой вложенности и переводить каждое представление вручную?

Также этот перевод применяется ко всем представлениям в RecyclerView, а не только к одному.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

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

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

Об устройствах низкого уровня: если вы хотите настроить таргетинг на пользователей с более низким API, производительность становится главным приоритетом.Теперь оба упомянутых вами случая влияют на производительность: для хранения большего количества View требуется больше памяти, а для запуска анимации требуется больше ресурсов процессора.Пришло время для компромисса.В вашем случае, когда у вас есть 2 анимации перевода, запущенные на любом элементе в RecyclerView, я предпочитаю создавать 2 отдельные анимации, запускаемые на 2 View.Таким образом, я могу сохранить кучу дополнительных контейнеров => сохранить память, анимация не запускается для всех элементов, поэтому она влияет на процессор только в течение небольшого промежутка времени во время анимации.

Итак, подведем итог, У вас свой подход к каждому случаю, выберите приоритет для случая, который вы выбрали, улучшите его, пожертвуйте другими, которые меньше влияют на общую проблему.Ни одно решение не является идеальным на 100%, компромисс всегда возникает ситуация при кодировании

0 голосов
/ 31 мая 2018

Я думаю, вы должны придерживаться плоской компоновки, как рекомендует Google, и переводить каждый вид отдельно.Я хотел бы создать пользовательский вид, где вы можете установить порог.И после установки вы можете просто передать им положение x пальца, и они решат, двигаться им или нет.

...