带有固定标题的自定义ListView,在设置填充时导致Jank

时间:2012-07-12 12:43:48

标签: android listview lag

我有一个自定义listView,其中包含一个固定标题和x个“俯卧撑”视图,可以向上推并隐藏在列表视图上方。

我附上图片来解释它们。对不起“黑色审查”,只是为了隐藏客户的徽标等。

我的问题是,如果我在固定的标题视图中添加填充,我将在它后面浮动listview项。

固定标题视图,使用与您在列表视图中搜索PinnedHeaderListView(即静态视图和标题)时相同的技术实现。

我找到了一种方法来启用填充,即通过将固定标头应用相同的填充到实际的listView,但仅在静态标头可见时才使用。

然而,调用setPadding会导致一个非常明显的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

2 个答案:

答案 0 :(得分:1)

需要更多关于您问题的信息。

根据我的理解,Jank是由于你正在使用的大量数据和可绘制的。

尝试为您的视图启用硬件加速。

有关硬件加速的更多信息,请尝试此http://developer.android.com/guide/topics/graphics/hardware-accel.html

答案 1 :(得分:0)

由于listView上的setPadding将导致布局调用,因此它将非常低效,特别是在具有复杂listView单元格的情况下。解决方案是将背景图形添加到固定标头,该标头表示所需的填充。这意味着整个固定头部是实心的。然后将在此图形后面绘制列表视图的元素。这是我们最终解决的问题。

它有效,但剪辑listView会更好。