Android开发 ViewPager2 - 观心静 - 博客园
ViewPage2是ViewPage的取代者,解决了一些解决了其前辈ViewPage的大部分难题,包括从右到左的布局支持,垂直方向,可修改的Fragment集合等。从易用性上来说ViewPage2的确会比ViewPage更简单,并且它实际上是使用RecyclerView实现的。源码里可以很容易看到,另外它的适配器也是RecyclerView.Adapter。
特别注意
在developer官网上,已经说明了 ViewPager2在导航键翻页(TV模式),根本没实现。所有,如果你的是TV应用,原则上不建议使用ViewPager2开发(TV应用用它浪费时间),而是使用ViewPager。
这下面说需要完善,都2022年了,居然还没完善。 本着钻研的精神(钻牛角尖),本博客最下面给了一个不太稳定的方法实现焦点的触控。
依赖
dependencies {
implementation "androidx.viewpager2:viewpager2:1.0.0"
}
使用RecyclerView.Adapter
使用场景一般是首页图片轮播,或者引导页面
xml
复制代码
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".viewpage2.ViewPager2Activity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/imagePager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
</androidx.constraintlayout.widget.ConstraintLayout>
复制代码
Adapter
复制代码
class ViewPager2Adapter1() : RecyclerView.Adapter<ViewPager2Adapter1.ViewHolder>() {
val mImageList = mutableListOf<Int>()
fun refreshData(list :MutableList<Int>?){
list?.let {
mImageList.addAll(list)
}
notifyDataSetChanged()
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val imageView = itemView.findViewById<ImageView>(R.id.image)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPager2Adapter1.ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_view_pager_demo_1, parent, false))
}
override fun onBindViewHolder(holder: ViewPager2Adapter1.ViewHolder, position: Int) {
holder.imageView.setImageResource(mImageList[position])
}
override fun getItemCount(): Int = mImageList.size
}
复制代码
activity
复制代码
class ViewPager2Activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_view_pager2)
val adapter = ViewPager2Adapter1()
val imagePager = findViewById<ViewPager2>(R.id.imagePager)
imagePager.adapter = adapter
adapter.refreshData(mutableListOf(R.drawable.ic_landscape_1, R.drawable.ic_landscape_2, R.drawable.ic_landscape_3, R.drawable.ic_landscape_4))
}
}