无线轮播android,Android无限轮播Banner的实现
概述
应用首页的广告轮播Banner,一般都会使用ViewPager来实现,但是ViewPager 没有轮播效果。
现成有这么几种实现方案:
1.使用Integer.MAX_VALUE ,理论上很难达到边界。
2.装饰adapter方式imbryk/LoopingViewPager@Github。
3.扩展ViewPager方式yanzm/LoopViewPager。
相关库
轮播效果其实就是一个定时任务,可以用定时器,Handler等。
此库通过handler定时发送消息实现,用的比较多,使用中感觉切换并非无缝。主要代码如下:
/**
* scroll only once
*/
public void scrollOnce() {
PagerAdapter adapter = getAdapter();
int currentItem = getCurrentItem();
int totalCount;
if (adapter == null || (totalCount = adapter.getCount()) <= 1) {
return;
}
int nextItem = (direction == LEFT) ? --currentItem : ++currentItem;
if (nextItem < 0) {
if (isCycle) {
setCurrentItem(totalCount - 1, isBorderAnimation);
}
} else if (nextItem == totalCount) {
if (isCycle) {
setCurrentItem(0, isBorderAnimation);
}
} else {
setCurrentItem(nextItem, true);
}
}
这里是在最后或第一页直接setCurrentItem(),因此,并非无缝轮播效果。
和本文开头的几个控件整合一下,即可方便 的实现我们想要无缝 的效果。
基本实现
改变首页和最后一页的跳转设置。
/**
* scroll only once
*/
public void scrollOnce() {
PagerAdapter adapter = getAdapter();
int currentItem = getCurrentItem();
if (adapter == null || adapter.getCount() <= 1) {
return;
}
int nextItem = (direction == LEFT) ? --currentItem : ++currentItem;
setCurrentItem(nextItem, true);
}
2.实现方式选择
第一种方式其实主要改变了adapter中的index,大体如下:
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
position = position % listviews.size() ;
//....
}
只是理论上的无限,需要自己处理position。
第二种装饰了adapter,在前后各添加一个Item,当到了我们添加的临界item的时候,立即设置到正确的 position ,主要方法如下:
LoopPagerAdapterWrapper:
int toRealPosition(int position) {
int realCount = getRealCount();
if (realCount == 0)
return 0;
int realPosition = (position-1) % realCount;
if (realPosition < 0)
realPosition += realCount;
return realPosition;
}
这里,内部封装position映射,不需要自己处理position,和正常ViewPager使用方式一样。
第三种,重写扩展ViewPager 继承 ViewGroup,使其item无限。需要自己处理position,而且 和 JakeWharton/ViewPagerIndicator@Github搭配使用起来不是很方便,setViewPager方法需要额外处理。
综上,使用第二种方式 扩展性和 易用性都比较好。
Indicator
JakeWharton/ViewPagerIndicator@Github
这是一个比较全面的indicator,如果我们只需要简单的CircleIndicator,可以抽取来使用。
优秀相关开源库:
也可以看看本人站在巨人肩膀上完成的DrawableIndicator@Github:可以实时偏移,切换动画,drawable资源。
效果图:
DrawableIndicator
测试
my_banner.xml:
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/picslooper1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:id="@+id/pageIndexor1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
app:indicator_height="15dp"
app:indicator_margin="15dp"
app:indicator_select_src="@drawable/select_drawable"
app:indicator_unselect_src="@drawable/unselect_drawable"
app:indicator_width="15dp" />
MainActivity:
AutoScrollViewPager viewPager = (AutoScrollViewPager) findViewById(R.id.picslooper1);
viewPager.setFocusable(true);
viewPager.setAdapter(new FragmentStateAdapter(getSupportFragmentManager()));
BaseIndicator pageIndex = (BaseIndicator) findViewById(R.id.pageIndexor1);
pageIndex.setViewPager(viewPager);
viewPager.startAutoScroll();
最终效果图
AutoScrollLoopViewPager
无线轮播android,Android无限轮播Banner的实现相关推荐
- android viewpager无限轮播
概述 github地址:https://github.com/Double2hao/ViewPagerCycleTest 一直很好奇ViewPager无限轮播的实现方式,于是稍微研究了下,作此文记录之 ...
- Android之无限轮播图源代码
Android轮播广告图是大家经常用到的一个控件今天便撸了一把代码 实现步骤 使用Viewpager进行实现图片滑动 设置ViewPager的数据,让其无限切换 Activity代码 public c ...
- vue 实现无限轮播_vue图片无限轮播
近期项目中出现了很多图片轮播的需求,趁此机会写了一个关于图片自动轮播,手动切换的小Demo,具体效果看下图: 屏幕快照 2018-10-25 上午9.47.30.png 具体实现代码如下: v-sho ...
- ViewPager两种方式实现无限轮播
给自己的忠告:虽然轮子很好用,但是使用轮子的前提是:如果不去封装一些复杂的功能,自己会用最基本的方法写一个,不然再好的轮子那也是别人的,当自己项目遇到和轮子不一样的地方,那就只能束手无策或者改人家的源 ...
- android 轮换实现动画,怎么在Android中实现一个首页无限轮播功能
怎么在Android中实现一个首页无限轮播功能 发布时间:2021-04-12 16:22:49 来源:亿速云 阅读:74 作者:Leah 这期内容当中小编将会给大家带来有关怎么在Android中实现 ...
- android画廊效果的轮播图,ViewPage实现无限轮播画廊效果
1. 效果图 2. 布局文件 主要使用的 android:clipChildren的意思:是否限制子View在其范围内.再父布局和viewpager中设置该属性 ,要显示三个界面 ,还要设置marg ...
- Android实现广告页图片无限轮播
一.概述 对于一个联网的Android应用, 首页广告无限轮播基本已经成为标配了. 那么它是怎么实现的呢? 有几种实现方式呢? 二.无限轮播的实现 1.最常规的手段是用 ViewPager来实现 2. ...
- android ViewPager实现无限轮播和设置监听事件
ViewPager的无限轮播,主要以实现为主.代码如下 首先定义activity_viewpager.xml: <LinearLayout android:layout_width=" ...
- android 3d布局轮播,android 图片/视频混合轮播控件banner
android 图片/视频混合轮播控件banner 在youth5201314的图片轮播控件做的修改 原作者github地址:https://github.com/youth5201314/banne ...
- Android 视频图片 轮播,详解android 视频图片混合轮播实现
循环添加视频view 图片view for (int i = 0 ;i if (beansarraylist.get(i).gettype()==1){ videoplayer = new nice ...
最新文章
- pandas使用groupby函数和cumsum函数计算每个分组内的数值累加值、并生成新的dataframe数据列( cumulative sum of each group in dataframe
- ubuntu 安装 codelite
- prometheus下载慢_Prometheus + Grafana 监控 SpringBoot
- 我的模块加载系统 v17的入门教程2
- PPT设计中的用图问题
- HDU 1059 Dividing 多重背包
- python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR
- java 自定义异常实例分析_Java自定义异常类的实例详解
- 【数字信号处理】基于matlab GUI正选信号时域+频域分析【含Matlab源码 887期】
- 寄存器PLC地址与寄存器modbus协议地址
- 集成高德地图:com.autonavi.amap.mapcore.nativeNewInstance
- 基于SSM开发的房屋租赁系统 JAVA
- 卡尔曼滤波和互补滤波的区别
- logback 自定义PatternLayout
- JavaScript 中 typeof 和 instanceof 的区别及如何判断数组
- 2sum/3sum/ksum 问题
- pd.DataFrame()函数解析(最清晰的解释)
- 龙族幻想服务器正在维护中,【龙族幻想】3月18日维护公告
- python wms系统源码_java开发的wms仓库管理系统源码(PC+Android)
- Flutter必备——Dart入门(上)
热门文章
- Docker核心原理之cgroups
- cad怎么调出科创易达绿化_【每日问答26】如何识别CAD图纸dwg格式版本?(内含往期)...
- 栈的应用就进匹配_笔记
- MySQL导入/导出数据
- 17、MySQL函数简介
- 1.16 Java的异常跟踪栈
- Acwing第 38 场周赛【完结】
- 【PAT乙级】1060 爱丁顿数 (25 分)
- 微软服务器系统玩游戏,微软将于2020年1月22日关闭Windows7游戏服务器
- windows不能访问linux服务器,window的vnc客户端无法访问Linux服务端的问题之一