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)) } }
你可能想看的