Пользовательский ListView с Pinned Header, вызывающий Jank при настройке дополнения

У меня есть пользовательский listView, который содержит один закрепленный заголовок и x количество «отжимающих» представлений, которые могут быть выдвинуты и скрыты над списком.

Я приложил изображение, чтобы объяснить их. Извините за «черную цензуру», просто чтобы скрыть логотип клиентов и т. Д.

Моя проблема в том, что если я добавлю добавление к прикрепленному представлению заголовка, я получу элементы списка, плавающие за ним.

Прикрепленное представление заголовка реализовано с той же техникой, что и при поиске PinnedHeaderListView, то есть статического представления и заголовка в списке.

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

Однако вызов 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()); } } 

Прежде всего, это изображение, показывающее выталкиваемые заголовки Показ задвинутых заголовков

Вот изображение, показывающее, как все тянется за мягким статическим приподнятым представлением. Стоит отметить, что он работает так, как если бы я настраивал прописку listView, но я получаю Jank (замедление), когда он включит / выключит статический заголовок.

Показывая ошибку, которая видна, если я не настраиваю прокладку

Solutions Collecting From Web of "Пользовательский ListView с Pinned Header, вызывающий Jank при настройке дополнения"

Нужна дополнительная информация по вашему вопросу.

С моим пониманием Jank объясняется огромным объемом данных и возможностью использования, которые вы используете.

Попробуйте включить аппаратное ускорение для вашего вида.

Для получения дополнительной информации о ускорении HW попробуйте http://developer.android.com/guide/topics/graphics/hardware-accel.html

Поскольку setPadding в listView вызовет макеты-вызовы, это будет очень неэффективно, особенно в случаях со сложными ячейками listView. Решение состоит в том, чтобы добавить фоновый рисунок к прикрепленному заголовку, который представляет требуемое дополнение. Это означает, что весь закрепленный заголовок является сплошным. Элементы списка-списка будут отображены за этой графикой. Это решение, с которым мы столкнулись.

Он работает, но было бы лучше закрепить listView.