10

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

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

我的问题是,如果我向固定的 Header 视图添加填充,我将让列表视图项浮动在它后面。

固定标题视图的实现方法与您搜索 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) 。

显示如果我不调整填充可见的错误

4

2 回答 2

1

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

据我了解,Jank 是由于您正在使用大量数据和可绘制对象。

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

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

于 2012-08-23T19:45:05.617 回答
0

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

它可以工作,但最好剪辑 listView。

于 2013-08-16T13:44:39.540 回答