根据位置动画RecyclerView项目

时间:2017-04-13 08:23:29

标签: android animation android-recyclerview

在onScrolled()在我RecyclerView的OnScrollListener我检查捕获的项目(SnapHelper.findSnapView())的距离到对齐位置(SnapHelper.calculateDistanceToFinalSnap()),并根据在该视图缩放图像。

目标是在我们的RecyclerView中间滚动浏览位置时缩放图像。

我的问题是,当我滚动得太快(fling)时,有些项目没有得到更新(大多数时候不再缩小),直到我以较低的速度滚动它们。 知道如何解决这个问题或者如何根据位置实现缩放而没有这个“错误”?

提前致谢:)

ng-href

2 个答案:

答案 0 :(得分:1)

您可以尝试扩展RecyclerView并覆盖offsetChildrenHorizontal(int dx)offsetChildrenVertical(int dy)。我之前做过类似的事情,可能会帮到你。在这里,当他们向上滚动并离开屏幕时,我缩放了被击落的物品。

@Override
    public void offsetChildrenVertical(int dy) {
        super.offsetChildrenVertical(dy);

        if (dy == 0)
            return;

        float y;

        int childCount = getChildCount();

        for (int i = 0; i < childCount; i++) {
            View view = getChildAt(i);
            y = view.getY() + view.getHeight();
            if (y <= view.getHeight() && y >= 0) {
                view.setScaleY(mCalculatedScaleFactor);
                view.setScaleX(mCalculatedScaleFactor);
                view.setAlpha(mCalculatedScaleFactor);
            } else {
                view.setScaleX(1);
                view.setScaleY(1);
                view.setAlpha(1);
            }
        }
    }

答案 1 :(得分:0)

我刚刚发现我可以在适配器中覆盖onViewDetachedFromWindow(),然后我可以重置缩放。

这感觉就像是一种解决方法,但它确实有效。

随意发布其他提示或解决方案! :)