我想更改我当前要使用的ListView,RecyclerView
以便可以使用,StaggeredGridLayoutManager
但是RecyclerView无法添加像ListView这样的标题。
通常,使用ListView时,我会在标题中设置一个空视图,然后将图像放置在listview的下方,然后通过滚动列表来平移底部图像以创建Parallax
效果。
因此,如果没有标题,如何使用来创建相同的视差效果RecyclerView
?
因此,今天我尝试将这种效果归档到RecyclerView
。我能够做到,但是由于代码太多,我将在这里粘贴我的github项目,并解释该项目的一些关键点。
https://github.com/kanytu/android-parallax-recyclerview
首先,我们需要getItemViewType
在RecyclerView.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);
为了测试这一点,我添加了一个postDelayed
Runnable,启动了应用程序,滚动到末尾,将项目添加到位置0,然后再次向上滚动。结果是:
如果有人在寻找其他视差效果,可以检查我的其他回购协议:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句