BannerViewPager
BannerViewPager copied to clipboard
动态设置指示器可见性没有生效
需求:指示器要先隐藏,然后根据左滑右滑让指示器显示
代码:
1、
binding.viewpagerImage.setAdapter(imageListAdapter).setAutoPlay(false).setCanLoop(true) .setIndicatorSlideMode(IndicatorSlideMode.NORMAL).setIndicatorVisibility(View.VISIBLE) .setIndicatorGravity(IndicatorGravity.END).setInterval(4000).setScrollDuration(300) .setIndicatorView(FigureIndicatorView(parent.context).apply { setRadius(DimenUtils.dpi2pxi(18)) setTextSize(DimenUtils.dpi2pxi(12)) setTextColor(Color.WHITE) setBackgroundColor(Color.parseColor("#80000000")) }).create()
2、
binding.viewpagerImage.setIndicatorVisibility(View.GONE)
测试:
发现指示器仍然可见,并没有隐藏
解决:
和作者沟通,可先暂时用反射来控制隐藏显示,以下是可用的代码
kotlin.runCatching { Timber.d("showImageIndicator:${show}") val bannerClazz: Class<*> = Class.forName("com.zhpan.bannerview.BannerViewPager") val indicatorLayoutField = bannerClazz.getDeclaredField("mIndicatorLayout") indicatorLayoutField.isAccessible = true val mIndicatorLayout = indicatorLayoutField.get(binding.viewpagerImage) as RelativeLayout val setVisibilityValue = if (show) View.VISIBLE else View.GONE if (mIndicatorLayout.visibility == setVisibilityValue){ return } val viewClazz: Class<*> = mIndicatorLayout.javaClass val setVisibilityMethod: Method = viewClazz.getMethod("setVisibility", Int::class.javaPrimitiveType) setVisibilityMethod.invoke(mIndicatorLayout, setVisibilityValue) }.onFailure { Timber.d("set Indicator setVisibility failed") }