今天我们主要说的是无限轮播,重点在无限;
话不多说直接上代码:
class BannerAdapter( var mContext: Context,var mViewPager: ViewPager?) : PagerAdapter() {
private val mData by lazy {
ArrayList<Bean>()
}
fun setData(list :ArrayList<Bean>){
mData.clear()
mData.addAll(list)
mData.addAll(list)
notifyDataSetChanged()
}
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val view = View.inflate(mContext, R.layout.item_viewpager, null)
val iv = view.findViewById<ImageView>(R.id.iv)
Picasso.with(mContext).load(mData[position].image).into(iv)
container.addView(view)
return view
}
//用这个
override fun finishUpdate(container: ViewGroup) {
super.finishUpdate(container)
var position = mViewPager.currentItem
if (position == 0 || position == dataList.size / 3 * 2) {
position = dataList.size / 3
mViewPager.setCurrentItem(position, false)
} else if (position == dataList.size - 1 || position == dataList.size / 3 - 1) {
position = dataList.size / 3 * 2 - 1
mViewPager.setCurrentItem(position, false)
}
}
//不用这个
override fun finishUpdate(container: ViewGroup) {
super.finishUpdate(container)
var position = mViewPager?.currentItem
if (position == 0){
position = mData.size / 2
mViewPager?.setCurrentItem(position,false)
}else if (position == mData.size - 1){
position = mData.size / 2 -1
mViewPager?.setCurrentItem(position,false)
}
}
override fun getCount() = mData.size
override fun getItemPosition(obj: Any) = POSITION_NONE
override fun isViewFromObject(view: View, obj: Any) = view === obj
override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
container.removeView(obj as View)
}
}
主要思想就是,一个列队肯定不好实现,我们也不能直接用无限个,要是使用最开始前边加一个最后边加一个,太麻烦,干脆直接两遍添加,然后取中间值就好了。简洁方便。