Подтвердить что ты не робот

Пользовательский 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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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