我正在努力获得视差效果。例如在声音云安卓应用程序或类似this之类的东西。
我有一个RecyclerView
,其中每个列表项都有FrameLayout
和ImageView
,我需要RecyclerView
中的每个背景图像进行视差分割。
public class MyRecyclerView {
private static final Dictionary<Integer, Integer> listViewItemHeights = new Hashtable<Integer, Integer>();
...
}
...在onBindViewHolder方法中我添加了这个:
...
viewHolder.scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
private int getScroll() {
View c = discountSectionLayoutManager.getChildAt(0);
int scrollY = -c.getTop();
listViewItemHeights.put(discountSectionLayoutManager.findFirstVisibleItemPosition(), c.getHeight());
for (int i = 0; i < discountSectionLayoutManager.findFirstVisibleItemPosition(); ++i) {
if (listViewItemHeights.get(i) != null)
scrollY += listViewItemHeights.get(i); //add all heights of the views that are gone
}
return scrollY;
}
@Override
public void onScrollChanged() {
int scrollY = - getScroll();
viewHolder.imageFrameLayout.setTranslationY(scrollY * 0.1f);
}
}
这个问题是每个项目都会向上滚动,而不仅仅是那些可见的项目。我的RecyclerView
很大,有很多项目,底部的项目也都会向上滚动。 (例如,如果我可以看到项目1-3并向下滚动,即使项目4-15也会像现在一样向右滚动)。也许可以某种方式修改getScroll()
方法只能滚动可见项的背景?