我有一个自定义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());
}
}
首先是显示推升标题的图像
这是一张图片,展示如何在填充的静态固定视图后面绘制内容。 值得注意的是,如果我调整listView的填充,它就像预期的那样工作,但是当它打开/关闭静态标题视图时,我会得到Jank(减速)。
答案 0 :(得分:1)
需要更多关于您问题的信息。
根据我的理解,Jank是由于你正在使用的大量数据和可绘制的。
尝试为您的视图启用硬件加速。
有关硬件加速的更多信息,请尝试此http://developer.android.com/guide/topics/graphics/hardware-accel.html
答案 1 :(得分:0)
由于listView上的setPadding将导致布局调用,因此它将非常低效,特别是在具有复杂listView单元格的情况下。解决方案是将背景图形添加到固定标头,该标头表示所需的填充。这意味着整个固定头部是实心的。然后将在此图形后面绘制列表视图的元素。这是我们最终解决的问题。
它有效,但剪辑listView会更好。