RecyclerView añadió SnapHelper esta clase de ayuda en la versión 24.2.0 para RecyclerView ayuda al final del desplazamiento de alineación de artículos a un lugar.
SnapHelper es una clase abstracta, subclase de las ofertas oficiales un LinearSnapHelper, se puede hacer la parada de artículo apropiado rodar cuando RecyclerView estancia posición neutral. 25.1.0 la versión oficial también proporciona una PagerSnapHelper subclase, puede hacer RecyclerView como ViewPager el mismo efecto, sólo se puede deslizar uno, y centrada.
Ejemplo:
diseño de escritura Actividad: activity_snap
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
diseño elemento escritura: item_list
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="500dp"
android:background="#00ff00"
android:gravity="center"
android:orientation="vertical"
android:layout_margin="5dp">
<Button
android:id="@+id/start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击按钮跳转" />
</LinearLayout>
inicialización RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_snap)
recycler = findViewById(R.id.recycler)
val manager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
recycler.layoutManager = manager
recycler.adapter = object : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val item = LayoutInflater.from(parent.context).inflate(R.layout.item_list, parent, false)
item.setOnClickListener {
startActivity(Intent(parent.context, SwipeActivity::class.java))
}
return Holder(item)
}
override fun getItemCount(): Int {
return 50
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
}
inner class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
}
}
}
//LinearSnapHelper:使当前Item居中显示,可以惯性滑动
val snapHelper = LinearSnapHelper()
snapHelper.attachToRecyclerView(recycler)
}
visualizar:
uso PagerSnapHelper
//PagerSnapHelper:像ViewPager一样的效果,每次只能滑动一页。
val snapHelper2 = PagerSnapHelper()
snapHelper2.attachToRecyclerView(recycler)