前言
- 这里不是通过原生的ViewPager实现的,通过banner的库来实现viewpager的需求
- 它本质也是操作viewpager,但是没法读懂完整代码,或者说关键代码没理解透切,只能拿来用
效果图
轮播.png
有两个库可以实现:
1、com.youth.banner:banner:2.1.0 因为项目不是Androidx,所以暂时弃用
2、com.github.Achenglove:AchengImageSliders:v1.0.2 公司同事写的
本文章用第二个库
开始实现
1、xml
<com.ccr.achengimagesilderlibrary.SliderLayout
android:id="@+id/slider_live"
android:layout_width="match_parent"
android:layout_height="78dp"
app:layout_constraintTop_toBottomOf="@id/tv_course_live_title"
android:layout_marginTop="20dp"/>
2、具体使用示例代码
SliderLayout它添加的View需要继承BaseSliderView
效果图的View
class LiveSliderView(context:Context,var item: HomeNewBean.LiveCourse) : BaseSliderView(context) ,View.OnClickListener{
override fun getView(): View {
val v = LayoutInflater.from(this.context).inflate(R.layout.fragment_home_course_live_item, null as ViewGroup?)
var tvTitle = v.findViewById<TextView>(R.id.title_text)
tvTitle.setText(item.title)
var name_text = v.findViewById<TextView>(R.id.name_text)
name_text.setText(item.publisher)
var iv_img = v.findViewById<ImageView>(R.id.iv_img)
GlideHelper.load(context,item.img?:"",iv_img,4)
var iv_live_gif = v.findViewById<ImageView>(R.id.iv_live_gif)
if (item.live == "直播中"){
Glide.with(mContext)
.asGif()
.load(R.drawable.live)
.into(iv_live_gif)
} else {
iv_live_gif.setImageResource(R.mipmap.icon_live_status)
}
val status_text = v.findViewById<TextView>(R.id.status_text)
status_text.setText(item.status?:"")
v.setOnClickListener(this)
return v
}
override fun onClick(v: View?) {
}
}
你看从中你可以做的文章就很多,我的布局是不是可以是viewpager,recycleview等等
使用代码:
val liveSliderView = LiveSliderView(mActivity!!,liveData.live_course[i])
slider_live?.addSlider(liveSliderView)
这里的添加,我们也可以添加不同的SliderView对不对,这样它轮播的内容就可以不一样了
最后还有些SliderLayout的基本属性
val str = MyApplication.context?.resources.getStringArray(R.array.silder)
slider_live?.setPresetTransformer(str[0])
slider_live?.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom)
slider_live?.setCustomAnimation(DescriptionAnimation(false))//是否显示底部弹框
slider_live?.setDuration(3000)
slider_live?.indicatorVisibility = PagerIndicator.IndicatorVisibility.Invisible //不要原来的指示器
slider_live?.addOnPageChangeListener(object :ViewPagerEx.OnPageChangeListener{
override fun onPageScrollStateChanged(p0: Int) {
}
override fun onPageScrolled(p0: Int, p1: Float, p2: Int) {
}
override fun onPageSelected(pos: Int) {
}
})
slider_live?.startAutoCycle()
如果这个库还没法满足你需求,就用com.youth.banner:banner:2.1.0看看,这个更强大些