PagerSnapHelper 是 Android 中 RecyclerView 的一个辅助类,用于实现类似于分页滚动的效果。它可以自动将 RecyclerView 的滚动位置“对齐”到最近的页面边界,从而实现类似 ViewPager 的效果。
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.PagerSnapHelper;
import androidx.recyclerview.widget.RecyclerView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
// 设置 LayoutManager
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
// 创建并设置适配器
MyAdapter adapter = new MyAdapter();
recyclerView.setAdapter(adapter);
// 创建并附加 PagerSnapHelper
PagerSnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
}
}
2. 让当前显示的item的View扩大或缩放显示
创建下面的文件
class ScaleCenterItemDecoration(private val scaleFactor: Float = 1f) :
RecyclerView.ItemDecoration() {
override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
val centerX = parent.width / 2
for (i in 0 until parent.childCount) {
val child = parent.getChildAt(i)
val childCenterX = (child.left + child.right) / 2
val distanceToCenter = abs(centerX - childCenterX)
val scale = 1 - (distanceToCenter.toFloat() / centerX) * (1.2f - scaleFactor)
child.scaleX = scale
child.scaleY = scale
}
}
}
使用
recyclerView.addItemDecoration(ScaleCenterItemDecoration())