一、实现效果
二、关键代码
1、自定义:LinearLayoutManager
指定位置放大item
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;public class ScaleLayoutManager extends LinearLayoutManager {private static final float MAX_SCALE = 1.45f; // 最大放大比例private static final float MIN_SCALE = 1.0f; // 最小缩放比例private static int MAX_LEFT_DISTANCE = 300; // 距离左边x px 时放大到最大private int mWidth;private int mHeight;public ScaleLayoutManager(Context context) {super(context, LinearLayoutManager.HORIZONTAL, false);// 转换dp到像素DisplayMetrics metrics = context.getResources().getDisplayMetrics();MAX_LEFT_DISTANCE = (int) (78 * metrics.density); // 100dpmWidth = (int) (65 * metrics.density); // 16dpmHeight = (int) (74 * metrics.density); // 200dp}@Overridepublic void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {super.onLayoutChildren(recycler, state);scaleChildViews();}@Overridepublic int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {int scrolled = super.scrollHorizontallyBy(dx, recycler, state);scaleChildViews();return scrolled;}private void scaleChildViews() {for (int i = 0; i < getChildCount(); i++) {View child = getChildAt(i);if (child == null) continue;float childCenterX = (child.getLeft() + child.getRight()) / 2f;float distance = Math.abs(MAX_LEFT_DISTANCE - childCenterX);// 计算缩放比例