我正在尝试使用Parallax并遇到一些奇怪的错误,想知道是否有人可以向其中添加一些输入。我见过的唯一可以有效实现视差的应用程序是soundcloud。这非常微妙,但是每个项目都有图像背景,并且在您滚动时具有视差效果。
我创建了一个自定义的RecyclerView来处理此问题,这是到目前为止的内容:
public class ParallaxScrollListener extends RecyclerView.OnScrollListener {
private float scrollSpeed = 0.5f;
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
int firstVisible = layoutManager.findFirstVisibleItemPosition();
int visibleCount = Math.abs(firstVisible - layoutManager.findLastVisibleItemPosition());
Matrix imageMatrix;
float tempSpeed = -100;
if (dy > 0) {
tempSpeed = scrollSpeed;
} else if (dy < 0) {
tempSpeed = -scrollSpeed;
}
for (int i = firstVisible; i < (firstVisible + visibleCount); i++) {
ImageView imageView = ((MyClass.MyAdapter.MyViewHolder) recyclerView.getLayoutManager().findViewByPosition(i).getTag()).image;
if (imageView != null) {
imageMatrix = imageView.getImageMatrix();
imageMatrix.postTranslate(0, tempSpeed);
imageView.setImageMatrix(imageMatrix);
imageView.invalidate();
}
}
}
在我的RecyclerView
适配器中,onBindView
我还有以下内容:
Matrix matrix = viewHolder.image.getImageMatrix();
matrix.postTranslate(0, 0);
viewHolder.image.setImageMatrix(matrix);
viewHolder.itemView.setTag(viewHolder);
最后,在onViewRecycled
方法中,我具有以下内容:
@Override
public void onViewRecycled(MyViewHolder viewHolder) {
super.onViewRecycled(viewHolder);
if (viewHolder.image != null) {
viewHolder.image.setScaleType(ImageView.ScaleType.MATRIX);
Matrix matrix = viewHolder.image.getImageMatrix();
// this is set manually to show to the center
matrix.reset();
viewHolder.image.setImageMatrix(matrix);
}
}
因此视差有效,但是RecyclerView中的视图也会移动。我在图像下方有一个CardView,它移动了,从而在每个项目之间形成了很大的空隙。滚动是造成这种情况的原因,上下滚动越多,间隙越大,并且随着视差将图像移出边界,图像变得更小。
我试过弄乱了诸如scrollSpeed之类的数字,OnScrollListener
但是虽然它减少了错误,但同时也减少了视差。
有谁知道如何在我的每个项目上实现无错误的视差效果RecyclerView
?我觉得我对此有所了解,但是它仍然非常有问题,我不知道下一步是什么。
附言:我尝试查看第三方库,但是它们似乎都只使用标头视差,例如CoordinatorLayout,我还没有发现仅在列表中的每个项目上都可以做到这一点。
我希望这个问题能得到很好的讨论,即使我没有解决我的问题,因为Parallax似乎在Android中使用不足,而且几乎没有解决之道。
感谢您的时间,感谢您的帮助。
我设法使Parallax使用此库:https : //github.com/yayaa/ParallaxRecyclerView
对于任何亲自进行此操作的人来说,玩游戏并查看其工作原理仍然是一件好事。
与我的代码相似的概念,但实际上有效!哈哈。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句