由"轮播图"setImageDrawable

作者: heavenxue | 来源:发表于2016-07-15 11:11 被阅读666次

      最近在做一个轮播图,本来想着能够用于公司项目中,可是公司竟然没有用到,自己就研究了一下~

      可是没想到的是,在自己的考虑之内,换几个可显示的方法来看,竟然出现了让人意想不到的后果,难不成是自己像的太多?一大段问号......所以,我便自己在这几天一直搜查各种资料,好吧,先从开始慢慢讲吧~

最终实现的效果图,如下:

我的实现思路是:

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....

项目地址:轮播图实现代码

相关文章

网友评论

    本文标题:由"轮播图"setImageDrawable

    本文链接:https://www.haomeiwen.com/subject/ncoejttx.html