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

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

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

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

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

Я нашел способ включить заполнение, а именно применить то же заполнение, что и закрепленный заголовок, к фактическому listView, но только когда виден статический заголовок.

Однако вызов setPadding вызывает довольно заметный 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 (slowdown) в то время, когда он включает/выключает статическое представление заголовка.

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


person havchr    schedule 12.07.2012    source источник
comment
+1 за очень красивые изображения, крутая художественная работа :)   -  person Adil Soomro    schedule 12.07.2012
comment
Пожалуйста, это не ваш вопрос, но не могли бы вы рассказать мне, как вы организовали свой список и макет приложения?   -  person Angelika    schedule 23.08.2012


Ответы (2)


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

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

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

Чтобы узнать больше об аппаратном ускорении, посетите этот http://developer.android.com/guide/topics/graphics/hardware-accel.html

person Ajay Kumar Meher    schedule 23.08.2012

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

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

person havchr    schedule 16.08.2013