相关动态
制作支持View,图片轮播的Banner
2024-11-19 20:34

之前有一个项目中有用到轮播,不过不是简单的轮播图片就完了,而是要轮播很多个View,一开始我的想法和大家一样在github在一个算了,哈哈,不过在试用了很多个项目之后都觉得不能完全满足我的需求,大部分还是针对于图片轮播的场景,所以是时候自己搞一个既支持图片,也支持各种自己定义的View,同时也可以选择不同实现方式的指示器或者干脆去掉,适应个各种需求场景。 制作支持View,图片轮播的Banner

制作支持View,图片轮播的Banner

这就是他的效果,下面先源码讲解先。

LoopViewPager

LoopViewPager是这个库的关键类,其内部最基本的实现类其实还是android自带的ViewPager,代码如下

 

在这里我们知道,LoopViewPager里面其实最主要就是包裹着ViewPage而已,至于指示器后面在讲。那么一个简单的ViewPage是怎么实现无限轮播的呢,关键setData()方法里,如下代码:

 

在上面的代码里有关键的类,是LoopViewPagerAdapter,实现的是View的无限轮播,有这个基础类,基本就可以为所欲为了 制作支持View,图片轮播的Banner

LoopViewPagerAdapter

这是针对View其中包括ImageView的轮播的,代码如下

 

这里在getCount()方法里返回mData.size()+2个数量,在getActualPosition()返回的是正确的position位置,当postion等于0的时候,返回的是最后一个View的位置,那个就会显示最后一个View,当position等于mData.size()+1时,返回的是第一个View,也就是说在第一个View左边加最后一个View,在最后一个View右边加第一个View,这样就可以做到首尾无缝连接,不过这样是不够的,在上面的initViewPage()方法里有如下代码

 

在返回的postion==0是最后一个View然后用viewPager.setCurrentItem()调整到最后一个的真实位置,当viewNumber+1是第一个View,通过viewPager.setCurrentItem()调整到第一个View的真实位置。这样就做到无限循环。

有了上面这个类就可以实现View的循环轮播。

讲完轮播,接着就是指示器,指示器我也写了两个,一种是简单的IndicatorView,没什么动画,直接图片切换,一种是实现指示器滑动动画的IndicatiorCanvasView。

IndicatorView

先讲简单的指示器,代码如下

 

这是很简单的指示器,首先集成LinearLayout,在通过initView()遍历ImageView,再通过addView添加,这就完成了指示器界面初始化。当ViewPage每滑动一次都会调用changeIndicator()方法,这里先遍历把所有的View都设为未选择状态,再把选中的ImageView设为选中的图片就行了,每什么说的。

IndicatiorCanvasView
 

首先initView()方法还是和之前一样,遍历ImageView再addView();重头戏在于当ViewPage滑动时会回调onPageScrolled()方法,而positionOffset是他的滑动比例,originMargin是两个指示点的距离,而originMargin是怎么算的能,如下代码:

 

既拿到第一个指示点和第二个指示点的位置,然后相减,就是两点之间的间距。在通过 (numoriginMargin)+originMarginpositionOffset拿到滑动的距离,调invalidate()方法刷新。 刷新是会回调:dispatchDraw(Canvas canvas)方法。

 

计算出来的值通过canvas.translate()移动canvas原点,这你在我自定义的文章见多了吧,再通过canvas.drawBitmap()动态画出移动的点。这就实现了点的动画。

这基本就是整个循坏Banner的所有重点。这个Banner既支持普通的View,当然也有懒人专用的传个数组就可实现图片轮播,整个项目我已经生产一个库,具体的源码和用法,怎么引用请参见github.

    以上就是本篇文章【制作支持View,图片轮播的Banner】的全部内容了,欢迎阅览 ! 文章地址:http://sjzytwl.xhstdz.com/news/7362.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://mip.xhstdz.com/ , 查看更多   
最新文章
电信卡怎么异地销户 销户流程是什么手机卡停机多久会被注销「电信卡怎么异地销户 销户流程是什么」
随着手机普及率越来越高,人们因为更工作、学习等各种原因更换手机号的频率也是越来越高,对于不用的手机号我们都需要进行销户,
梦金园去年净利同比降17.8%至1.89亿元 海外增700%
《科创板日报》3月29日讯(记者 徐赐豪)近期,黄金行情不断上涨,引发资本市场高度关注,黄金相关的企业也备受瞩目。昨晚公布其
怎么找回qq密码qq密码忘记了手机号也换了怎么办「怎么找回qq密码」
在日常的数字生活中,QQ作为我们常用的通讯工具之一,其账号安全显得尤为重要。然而,偶尔我们可能会遇到忘记密码的尴尬情况。别
大屏智能千元机 酷派5860价格欲破1100元酷派5860手机「大屏智能千元机 酷派5860价格欲破1100元」
(中关村在线手机频道行情报道)2012年3月6日,酷派5860(行货)在“ZOL商城”促销,最新报价为1181元,含发票。本款的配件为:
计步器怎么删掉手机自动计步器「计步器怎么删掉」
计步器作为现代智能设备的一部分,已经成为许多人日常健康管理的得力助手。然而,在某些情况下,用户可能需要删除计步器中的数据
三星今天上午宣布Note7爆炸原因 已导致损失超10亿美元手机爆炸「三星今天上午宣布Note7爆炸原因 已导致损失超10亿美元」
2016年8月, Galaxy Note 7智能手机在上市后,“引爆”了全球对于手机市场安全问题的关注,上百起电池燃烧事故让三星频繁陷入舆
CBA八强出炉!下半区比上半区惨烈,9-12最终排名确定!
在附加赛全部结束之后,八强的对阵已经全部出来了。其中上半区:广厦-青岛、辽宁-新疆。广厦和青岛的比赛,大家肯定都看好广厦。
财知道 | 爆卖上百万件!巴掌大的小东西,是年轻人的“到此一游”
或是四四方方、圆圆造型,或是形态各异,一块硬板刻着各式内容,再配上一块方寸大小的磁力贴片,曾被人吐槽“又土又贵”的冰箱贴
Z趋势:4G高速时代 机会与挑战并存4g手机价格「Z趋势:4G高速时代 机会与挑战并存」
2013年12月4日下午,工业和信息化部向中国联通、中国电信、中国移动正式发放了第四代移动通信业务牌照(即4G牌照),三家均获得T
华为手机工程模式怎么进入(华为手机工程模式怎么进入桌面)手机工程模式「华为手机工程模式怎么进入(华为手机工程模式怎么进入桌面)」
华为手机工程模式怎么进入相信很多小伙伴还不知道,现在让我们一起来看看吧!华为手机工程模式怎么进入(华为手机工程模式怎么进入