Android安卓比较完美的无限自动轮播
轮播功能在APP中是比较常见的,网上也有很多第三方的自动轮播库,做的很不错,这里自己手写一版简单的ViewPager+Handler机制的自动无限轮播,小白可以直接上手的。
先上简单的核心代码,代码中有详细的注释。
private void initView() { auto_viewpager = (ViewPager) findViewById(R.id.vp_shuffling); tv_content = (TextView) findViewById(R.id.tv_content); dotLayout = (LinearLayout) findViewById(R.id.layout_point); mADParseArray = new ArrayList<String>(); mADParseArray .add("http://m.easyto.com/m/zhulifuwu_banner.jpg"); mADParseArray .add("http://m.easyto.com/m/japan/images/banner_3y_new.jpg"); mADParseArray .add("http://m.easyto.com/m/japan/images/banner_5y_new.jpg"); final int size = mADParseArray.size(); content = new String[]{"轮播图介绍一", "轮播图介绍二", "轮播图介绍三"}; auto_viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { /** * @param position:跳转完毕的页码角标,这个方法做自动轮播 */ @Override public void onPageSelected(int position) { Log.e(TAG, "onPageSelected"); refreshPoint(position % size); if (mHandler.hasMessages(HOME_AD_RESULT)) { mHandler.removeMessages(HOME_AD_RESULT); } mHandler.sendEmptyMessageDelayed(HOME_AD_RESULT, 3000); } /** * @param arg0:滑动时代表当前页角标,滑动结束时代表滑动停止时的页码角标 * @param arg1:0-1或者1-0变化 * @param arg2:0 <-> 屏幕的宽度值变化 */ @Override public void onPageScrolled(int arg0, float arg1, int arg2) { Log.e(TAG, "onPageScrolled"); } /** * @param arg0:0 没滑动 1:正在滑动 2:滑动完毕 */ @Override public void onPageScrollStateChanged(int arg0) { Log.e(TAG, "onPageScrollStateChanged = " + arg0); if (ViewPager.SCROLL_STATE_DRAGGING == arg0 && mHandler.hasMessages(HOME_AD_RESULT)) { mHandler.removeMessages(HOME_AD_RESULT); } } }); // BannerAdapter adapter = new BannerAdapter(mContext, mADParseArray); auto_viewpager.setAdapter(adapter); initPointsLayout(size); auto_viewpager.setCurrentItem(size * 1000, false);//设置当前position,不设置开始无法右滑 // 利用handler启动自动轮播 mHandler.sendEmptyMessageDelayed(HOME_AD_RESULT, 3000); }
handler中
private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { // 广告 case HOME_AD_RESULT: auto_viewpager.setCurrentItem(auto_viewpager.getCurrentItem() + 1, true);//设置播放下一页 break; } } };
其中比较重要的就是viewpager滑动监听的三个回调方法,注释上都有详细的解释,相信看了这个以后小白应该也会手写一个简单的无限自动轮播功能了。是不是简明易懂0.0
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android视差效果
这次带来的是结合CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout和FloatingActionButton打造炫酷的视觉差效果。 实现步骤 一:需要在主题文件中将Activity的标题栏去掉 二:编写Activity的布局文件 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity...
- 下一篇
数据库获取 Android 短信
读取短信需要的权限 <uses-permissionandroid:name="android.permission.READ_SMS"/> 读取数据库短信方法 publicstaticList<Map<String,String>>getSmsCode(){ StringlastTime="1534228493681";//时间 Log.i("SMSUtil","开始获取短信"); Cursorcursor=null; //添加异常捕捉 try{ //第一种,查询所有短信 cursor=App.mContext.getContentResolver().query( Uri.parse("content://sms"), newString[]{"_id","address","body","date","person","type"}, null,null,"datedesc"); //第二种,通过查询条件,例如:date>lastTime,过滤数据 /*cursor=App.mContext.getContentResolver().qu...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群