最近在做一个轮播图,本来想着能够用于公司项目中,可是公司竟然没有用到,自己就研究了一下~
可是没想到的是,在自己的考虑之内,换几个可显示的方法来看,竟然出现了让人意想不到的后果,难不成是自己像的太多?一大段问号......所以,我便自己在这几天一直搜查各种资料,好吧,先从开始慢慢讲吧~
最终实现的效果图,如下:
我的实现思路是:
1、自定义View继承自ViewPager(这里我的ViewPager还要在继承一个FrameLayout,因为我还要在ViewPager上画指示点图,就是所谓的小圆点,所以先定义一个继承自FrameLayout的View,在这里要addview上继承自ViewPager的自定义View且add上小圆点)
2、在自定义view上布局,加入轮播控制,利用viewPager的postDelayed方法定时的更新viewpager的选中状态
3、监听viewPager的addOnPageChangeListener事件,利用setSelected方法来更新小圆点的选中状态
因为我想把轮播图给继承成一个lib,可以被大家来广泛使用,所以,在自定义view上addview小圆点的时候,小圆点图片用自定义属性定义的,我把小圆点的image用setImageResource来完成的,完美实现了上面的效果图。
然后我就在想,咦?既然可以用setImageResource来实现,那么用setImageDrawable也是可以的吧?有了这么个心思,马上就行动了,可是没有想到的是,在我完成代码,实现效果图的时候,小圆点的选中状态竟然不听使唤了...哇哇大哭...如下:
开始了我的寻果之路...
1、我在网上各种搜查setImageResource和setImageDrawable的区别,给出的最佳结果是,google建议使用setImageDrawable,因为setImageResource是在UI线程中对图片读取和解析的,所以有可能对一个Activity的启动造成延迟....
擦...突然蒙逼了。为啥我用setImageDrawable却不能实现setSelected小圆点的选中状态呢?
2、然后,我就开始各种怀疑,难不成是我自定义属性取到的图片drawable取得方法不对?如果不对的话,小圆点图片应该也显示不出来啊,也试用了各种获取图片drawable的方法,最终无果......
3、接着,我又查了各种setSelected方法的使用和实现轮播图的各种方法,都没有用到在自定义属性中获取图片,赋值后,然后更新选中状态的....我又在想难不成,就不能这么用?
3、最后,我又开始重写了这个轮播图的实现,没有集成lib,而是直接在一个app中进行各种查看,然后,我给小圆点赋值图片的时候,没有用自定义属性去取...而是直接赋值到小圆点上...最后齐刷刷的...额...setImageResource和setImageDrawable竟然都可以完好的显示上面的效果图....
我突然感觉到.哦,原来是我的取图片的时候在自定义属性那里,如果没有用到setSelected方法,使用setImageResource和setImageDrawable是都没有问题的,最后,但是使用setSelected方法,但是都不是从自定义属性中取图片,那就都没问题。最终的结果,使用setSelected方法,在自定义属性中获取到图片,必须使用setImageResource方法....
不知道对不对,各位大神来指正,thanks....
项目地址:轮播图实现代码
> 如果此篇文章对您有帮助或者您很感兴趣,那么小手指别忘了点个赞哦!么么哒,谢谢关注!欢迎star 和 follow 🤑