RecyclerView的视差标题效果

p

我想更改我当前要使用的ListView,RecyclerView以便可以使用,StaggeredGridLayoutManager但是RecyclerView无法添加像ListView这样的标题。

通常,使用ListView时,我会在标题中设置一个空视图,然后将图像放置在listview的下方,然后通过滚动列表来平移底部图像以创建Parallax效果。

因此,如果没有标题,如何使用来创建相同的视差效果RecyclerView

佩德罗·奥利维拉(Pedro Oliveira)

因此,今天我尝试将这种效果归档到RecyclerView我能够做到,但是由于代码太多,我将在这里粘贴我的github项目,并解释该项目的一些关键点。

https://github.com/kanytu/android-parallax-recyclerview

首先,我们需要getItemViewTypeRecyclerView.Adapter课堂上看一下此方法定义了我们要处理的视图类型。该类型将传递给onCreateViewHolder我们,然后可以在其中增加不同的视图。所以我要做的是:检查职位是否是第一个。如果是这样,则对标题进行膨胀,如果不对正常行进行膨胀。

我还添加了一个CustomRelativeLayout剪辑视图的图层,因此分隔符和行位于标题顶部都没有问题。

从这一点来看,您似乎知道其背后的其余逻辑。

最终结果是:

在此处输入图片说明

编辑:

如果需要在适配器中插入一些东西,请确保通过在notifyItemChanged/Inserted方法中加1来通知正确的位置例如:

public void addItem(String item, int position) {
    mData.add(position, item);
    notifyItemInserted(position + 1); //we have to add 1 to the notification position since we don't want to mess with the header
}

我完成的另一个重要编辑是滚动逻辑。mCurrentOffset我使用系统无法插入项目,因为如果添加项目,则偏移量会发生变化。所以我做的是:

ViewHolder holder = findViewHolderForPosition(0);
if (holder != null)
  ((ParallaxRecyclerAdapter) getAdapter()).translateHeader(-holder.itemView.getTop() * 0.5f);

为了测试这一点,我添加了一个postDelayedRunnable,启动了应用程序,滚动到末尾,将项目添加到位置0,然后再次向上滚动。结果是:

在此处输入图片说明

如果有人在寻找其他视差效果,可以检查我的其他回购协议:

https://github.com/kanytu/android-parallax-listview

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章