Пользовательский ListView с Pinned Header, вызывающий Jank при настройке дополнения
У меня есть пользовательский listView, который содержит один закрепленный заголовок и х количество "отжимающих" представлений, которые могут быть выдвинуты и скрыты над списком.
Я приложил изображение, чтобы объяснить их. Извините за "черную цензуру", просто чтобы скрыть логотип клиентов и т.д.
Моя проблема в том, что если я добавлю добавление к прикрепленному представлению заголовка, я получу элементы списка, плавающие за ним.
Прикрепленное представление заголовка реализовано с той же техникой, что и вы, если вы будете искать PinnedHeaderListView, то есть статический вид и заголовок в списке.
У меня есть способ включить заполнение, и это путем применения того же дополнения, что и прикрепленный заголовок, к фактическому listView, но только тогда, когда отображается статический заголовок.
Однако вызов setPadding вызывает видимый Jank, который я бы хотел удалить.
Кто-нибудь знает, как удалить этот jank?
У меня есть простое приложение с простыми представлениями и фиктивными данными, которое не показывает этот jank, поэтому, возможно, количество jank зависит от сложности компоновки ячеек.
private void updateIfShouldShowStaticHeaderView() {
//unfortunately setting the padding of the listView causes JANK.
//any ideas?
int bottomOfFloatingHeader = floatingHeader.getBottom();
if (bottomOfFloatingHeader < mHeaderViewHeight) {
staticHeaderViewIsVisible = true;
staticHeader.setVisibility(View.VISIBLE);
//need to set padding of listView to avoid having list-view items float behind my padded static header
setPadding(0, staticHeader.getPaddingTop(), 0, getPaddingBottom());
} else {
staticHeaderViewIsVisible = false;
staticHeader.setVisibility(View.INVISIBLE);
//need to set padding of listView to avoid having list-view items float behind my padded static header
setPadding(0, 0, 0, getPaddingBottom());
}
}
Прежде всего, это изображение, показывающее вытолкнутые заголовки
![showing the pushed-up headers]()
Вот изображение, показывающее, как вещи рисуются за проложенным статическим приподнятым представлением.
Стоит отметить, что он работает как намеренный, если я настраиваю прописку listView, но я получу Jank (замедление), когда он включит/выключит статический заголовок.
![showing the error that is visible if I do not adjust padding]()
Ответы
Ответ 1
Так как setPadding в listView вызовет макеты-вызовы, это будет очень неэффективно, особенно в случаях со сложными ячейками listView. Решение состоит в том, чтобы добавить фоновый рисунок к прикрепленному заголовку, который представляет требуемое дополнение. Это означает, что весь закрепленный заголовок является сплошным. Элементы списка-списка будут отображены за этой графикой. Это решение, с которым мы закончили.
Это работает, но было бы лучше закрепить listView.
Ответ 2
Вам нужна дополнительная информация по вашему вопросу.
С моим пониманием Jank объясняется огромным объемом данных и возможностью использования, которые вы используете.
Попробуйте включить аппаратное ускорение для вашего представления.
Для получения дополнительной информации о ускорении HW попробуйте http://developer.android.com/guide/topics/graphics/hardware-accel.html