gpt4 book ai didi

android - 缩放中央图像回收器 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:25 24 4
gpt4 key购买 nike

我有带有图像的 RecyclerView。它基于 this solution .使用 Glide 将图像延迟加载到 View 中。我需要像这样在中央图像上添加缩放: example

我该怎么做?

最佳答案

影响你想要什么的最直接的方法是扩展LinearLayoutManager。正如您无疑发现的那样,正确地 Hook 到滚动事件是一件痛苦的事情:

那么让我们扩展管理器。我们将创建一些您可能会公开的参数。

 public class ZoomCenterCardLayoutManager extends LinearLayoutManager {
// Shrink the cards around the center up to 50%
private final float mShrinkAmount = 0.5f;
// The cards will be at 50% when they are 75% of the way between the
// center and the edge.
private final float mShrinkDistance = 0.75f;

填写你的构造函数,然后覆盖scrollHorizo​​ntallyBy:

   @Override 
public int scrollHorizontallyBy(int dx,
RecyclerView.Recycler recycler, RecyclerView.State state) {

调用 parent 的版本并保存行进的距离。我们需要在方法结束时返回它:

      int scrolled = super.scrollHorizontallyBy(dx, recycler, state);

我们将设置一个简单的线性插值。看起来不错。

      float midpoint = getWidth() / 2.f;
float d0 = 0.f;
float d1 = mShrinkDistance * midpoint;
float s0 = 1.f;
float s1 = 1.f - mShrinkAmount;

遍历控件的所有 Activity 子项,运行插值,并设置子项的比例。

      for (int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
float childMidpoint =
(getDecoratedRight(child) + getDecoratedLeft(child)) / 2.f;
float d = Math.min(d1, Math.abs(midpoint - childMidpoint));
float scale = s0 + (s1 - s0) * (d - d0) / (d1 - d0);
child.setScaleX(scale);
child.setScaleY(scale);
}

return scrolled;
}

这几乎就是您所需要的。最后一步是确保在初始化后调用此调整——否则在第一次移动控件之前缩放不会生效:

   @Override
public void onLayoutChildren(Recycler recycler, State state) {
super.onLayoutChildren(recycler, state);
scrollHorizontallyBy(0, recycler, state);
}

}

这就是它的全部。 super 响应,您可以将这个新的布局管理器放入任何水平回收器中。

关于android - 缩放中央图像回收器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com