在onScrolled()在我RecyclerView的OnScrollListener我检查捕获的项目(SnapHelper.findSnapView())的距离到对齐位置(SnapHelper.calculateDistanceToFinalSnap()),并根据在该视图缩放图像。
目标是在我们的RecyclerView中间滚动浏览位置时缩放图像。
我的问题是,当我滚动得太快(fling)时,有些项目没有得到更新(大多数时候不再缩小),直到我以较低的速度滚动它们。 知道如何解决这个问题或者如何根据位置实现缩放而没有这个“错误”?
提前致谢:)
ng-href
答案 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(),然后我可以重置缩放。
这感觉就像是一种解决方法,但它确实有效。
随意发布其他提示或解决方案! :)