先看一下效果:(图片是有指示器的,只是被上层的视图挡住了,这里不需要这个东西)

参考:https://github.com/zhpanvip/BannerViewPager
详细的API可以看这个:https://zhuanlan.zhihu.com/p/80802091


开始使用,添加依赖:

allprojects {    repositories {    ...    maven { url 'https://jitpack.io' }    }}

还有这个:implementation 'com.github.zhpanvip:BannerViewPager:2.7.3'

创建一个布局:(放图片的,当然其他的也可以放,比如一些描述性文字)

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/banner_image"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:scaleType="centerCrop"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent"        app:layout_constraintBottom_toBottomOf="parent"/>androidx.constraintlayout.widget.ConstraintLayout>

创建一个ViewHolder,解析布局和加载数据

package com.ydduong.gsa.adapter.holderimport android.view.Viewimport android.widget.ImageViewimport com.ydduong.gsa.Rimport com.zhpan.bannerview.holder.ViewHolderclass MainFragmentBannerViewHolder : ViewHolder<Int>{    override fun getLayoutId(): Int {        // 返回我们刚刚创建的布局文件        return R.layout.fragment_main_banner    }    override fun onBind(itemView: View?, data: Int?, position: Int, size: Int) {        // 解析数据并加载到布局里,这里的data不仅仅可以是Int,还可以自己在定义一个类,传入更多的数据        val imageView = itemView!!.findViewById<ImageView>(R.id.banner_image)        // 这里的data就是图片的id        imageView.setImageResource(data!!)    }}

在activity或者fragment的布局中添加控件:

<com.zhpan.bannerview.BannerViewPager    android:id="@+id/fragment_main_banner_view"    android:layout_width="0dp"    android:layout_height="0dp" />

在activity或者fragment中使用了:

package com.ydduong.gsa.fragmentimport android.os.Bundleimport androidx.fragment.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport com.ydduong.gsa.Rimport com.ydduong.gsa.adapter.holder.MainFragmentBannerViewHolderimport com.zhpan.bannerview.BannerViewPagerimport java.util.ArrayList/** * A simple [Fragment] subclass. */class MainFragment : Fragment() {    // MainFragmentBannerViewHolder就是上面写的ViewHolderprivate lateinit var mBannerViewPager: BannerViewPager<Int, MainFragmentBannerViewHolder>        override fun onCreateView(        inflater: LayoutInflater, container: ViewGroup?,        savedInstanceState: Bundle?    ): View? {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.fragment_main, container, false)    }    override fun onActivityCreated(savedInstanceState: Bundle?) {        super.onActivityCreated(savedInstanceState)        initBanner()    }    override fun onResume() {        super.onResume()        mBannerViewPager.startLoop()    }    override fun onPause() {        super.onPause()        mBannerViewPager.stopLoop()    }    /**     * 设置轮播图     */    private fun initBanner() {        // 构造数据        val mDrawableList: MutableList<Int> = ArrayList()        mDrawableList.add(R.drawable.guide0)        mDrawableList.add(R.drawable.guide1)        mDrawableList.add(R.drawable.guide2)                mBannerViewPager = requireView().findViewById(R.id.fragment_main_banner_view)        mBannerViewPager.setAutoPlay(true)        .setHolderCreator { MainFragmentBannerViewHolder() }        .setOnPageChangeListener(            object : OnPageChangeListenerAdapter() {                override fun onPageSelected(position: Int) {                    // 图片改变监听事件                }            }        )        .setOnPageClickListener {            // 图片点击事件        }        .create(mDrawableList)    }}

使用起来很方便,还有其他很多的样式,可以去GitHub看看。不需要我们自己写适配器,只需要我们继承一个ViewHolder,告诉适配器,我们解析的界面是怎样的以及如何加载数据,之后直接在activity或者fragment中使用

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android传感器学习总结
  5. Android:Activity(二):Bundle的作用
  6. Android(安卓)创建fragment时向fragment中传数据
  7. android java 拷贝数据库文件到U盘,从U盘拷贝文件到私有目录下实
  8. android中访问 webView加载URL时的response数据
  9. Android(安卓)给图片、文字、控件、布局添加阴影效果(悬浮效果)

随机推荐

  1. 优秀Android开源项目
  2. Caused by: com.android.builder.dexing.
  3. android打电话发短信
  4. Android(安卓)第六天重置版_Activity
  5. 《Android多功能日历教程》
  6. Android(安卓)Studio报错:Could not GET '
  7. Android_GPS
  8. Android设备adb授权的原理
  9. Android(安卓)在屏幕上打印LOG
  10. Android(安卓)PinnedSectionListView 收