概述:
要用ViewPager实现图片轮播,主要是两步:
1:用PagerAdapter使图片可以滑动切换
2:用Handler来实现图片自动轮播

页面布局部分的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/drawerlayout"android:layout_width="match_parent" android:layout_height="match_parent"><LinearLayout
       android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayout
           android:layout_width="wrap_content"android:layout_height="150dp"android:orientation="vertical"><android.support.v4.view.ViewPager
               android:id="@+id/viewPager"android:layout_width="fill_parent"android:layout_height="match_parent" /><AbsoluteLayout
               android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayout
                   android:id="@+id/viewgroup"android:layout_width="match_parent"android:layout_height="30dp"android:layout_alignParentRight="true"android:orientation="horizontal"android:gravity="right|bottom"android:layout_y="120dip"></LinearLayout></AbsoluteLayout></FrameLayout></LinearLayout>
</android.support.v4.widget.DrawerLayout>

控制逻辑部分的java代码:

public class MainActivity extends AppCompatActivity  implements ViewPager.OnPageChangeListener {private MyHandler handler = new MyHandler(new WeakReference<>(this));private ViewPager viewPaper;private ImageView[] tips = null;private ImageView[] imgs = null;private ViewGroup group;private int[] ids = new int[]{R.drawable.sc_1,R.drawable.sc_2,R.drawable.sc_3};//载入图片@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);group = (ViewGroup)findViewById(R.id.viewgroup);viewPaper = (ViewPager)findViewById(R.id.viewPager);//将标识点装载入ViewGroup中tips = new ImageView[ids.length];for(int i=0;i<ids.length;i++){ImageView imageview = new ImageView(this);imageview.setLayoutParams(new LinearLayout.LayoutParams(7,7));//设置标识点的大小tips[i] = imageview;if(i==0){//加载图片tips[i].setBackgroundResource(R.drawable.page_indicator_focused);}else{tips[i].setBackgroundResource(R.drawable.page_indicator_focused);}//设置标识点的位置参数LinearLayout.LayoutParams layoutparams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));layoutparams.leftMargin = 3;layoutparams.rightMargin = 3;group.addView(imageview,layoutparams);}group.bringToFront();//将轮播图片加载到数组中imgs = new ImageView[ids.length];for(int i=0;i<ids.length;i++){ImageView imageview = new ImageView(this);imgs[i] = imageview;imageview.setBackgroundResource(ids[i]);}//设置AdapterviewPaper.setAdapter(new MyAdapter());//设置监听。主要是设置标识点背景viewPaper.setOnPageChangeListener(this);viewPaper.setCurrentItem((imgs.length)*100);//启动轮播handler.sendEmptyMessageDelayed(MyHandler.MSG_UPDATE_IMG, MyHandler.MSG_DELAY);}public class MyAdapter extends PagerAdapter{@Overridepublic int getCount(){return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1){return arg0 == arg1;}@Overridepublic void destroyItem(View container,int  position,Object object){
//            ((ViewPager)container).removeView(imgs[position % imgs.length]);}//载入图片进去@Overridepublic Object instantiateItem(View container, int position){position %= imgs.length;ImageView  view = imgs[position % imgs.length];ViewParent vp = view.getParent();if(vp != null){ViewGroup parent = (ViewGroup)vp;parent.removeView(view);}try {((ViewPager) container).addView(imgs[position],0);}catch(Exception e){}return imgs[position % imgs.length];}}@Overridepublic void onPageScrollStateChanged(int arg0) {switch(arg0){case ViewPager.SCROLL_STATE_DRAGGING://正在滑动handler.sendEmptyMessage(MyHandler.MSG_STOP_IMG);break;case ViewPager.SCROLL_STATE_IDLE://已经完成切换handler.sendEmptyMessageDelayed(MyHandler.MSG_UPDATE_IMG,MyHandler.MSG_DELAY);break;default:break;}}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int arg0) {setImageBackground(arg0 % imgs.length);handler.sendMessage(Message.obtain(handler,MyHandler.MSG_PAGE_OLD,arg0,0));//记录切换到的页码}/*** 设置选中的tip的背景* @param selectItems*/private void setImageBackground(int selectItems){for(int i=0; i<tips.length; i++){if(i == selectItems){tips[i].setBackgroundResource(R.drawable.page_indicator_focused);}else{tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);}}}public class MyHandler extends Handler{/*请求轮播*/protected static final int MSG_UPDATE_IMG = 1;/*请求暂停轮播*/protected static final int MSG_STOP_IMG = 2;/*请求开始轮播*/protected static final int MSG_START_IMG = 3;/*记录要开始轮播的页号*/protected static final int MSG_PAGE_OLD = 4;/*轮播时间间隔*/protected static final long MSG_DELAY = 1000;//使用弱引用private WeakReference<MainActivity> weakReference;private int currentItem = 0;protected MyHandler(WeakReference<MainActivity> wk){this.weakReference = wk;}public void handleMessage(Message msg) {super.handleMessage(msg);MainActivity activity = weakReference.get();if(activity == null){return;}//检查并移除队列中未发送的消息if (activity.handler.hasMessages(MSG_UPDATE_IMG) && currentItem > 1){activity.handler.removeMessages(MSG_UPDATE_IMG);}switch(msg.what){case MSG_UPDATE_IMG:currentItem ++;//设置一个显示图片的下标,实现切换效果activity.viewPaper.setCurrentItem(currentItem);//准备下次切换activity.handler.sendEmptyMessageDelayed(MSG_UPDATE_IMG,MSG_DELAY);break;case MSG_STOP_IMG://不发送消息就暂停了break;case MSG_START_IMG:activity.handler.sendEmptyMessageDelayed(MSG_UPDATE_IMG,MSG_DELAY);break;case MSG_PAGE_OLD://记录页号currentItem = msg.arg1;break;default:break;}}}
}

安卓开发——基于ViewPager的图片轮播相关推荐

  1. Android使用ViewPager实现图片轮播和手势滑动

    ViewPager常用来实现图片的轮播,比如淘宝首页,会把一些促销的商品的图片和描述信息来回的播放,这就是典型的使用ViewPager实现的. ViewPager属于布局管理器,允许用户通过页面翻转查 ...

  2. 基于面向对象的图片轮播(js原生代码)

    无论你想走多远,你都需要不断地走下去.前端最精华的便是原生的js,这也是我们前端工程师的技术分层的重要指标,也提现这你的代码能力,开发的水平.废话不多说,进入今天的主要分享----基于面向对象思想的图 ...

  3. Android使用viewpager实现图片轮播效果

    自定义View实现图片轮播,实现了图片自动轮播,手动滑动,轮播标题,以及点击事件. 里面有很多注释 一.文件布局 二.代码 ImageBannerViewGroup类 /*** Created by ...

  4. 基于vue商品图片轮播和放大镜的方案

    实现原理 放大镜的原理用一句话概括,就是根据小图上的鼠标位置去定位大图. 原理图(以2倍放大为例) 相信原理图已经画的很明白了, 图中,左侧框是小图框,其蓝色区域为图片遮罩层(需放大区域),右侧框是整 ...

  5. 实现一个基于jQuery的图片轮播效果(带自动播放)

    data.json {"data": [{"title": "西游题材小游戏合辑","subtitle": " ...

  6. android viewflipper图片轮播,android开发:ViewFlipper实现图片轮播

    效果图: 上代码: Activity: package com.example.ViewFlipper; import androidx.appcompat.app.AppCompatActivity ...

  7. iOS开发 - UIPageControl实现分页图片轮播器

    分页相关属性 只要将UIScrollView的pageEnabled属性设置为YES,UIScrollView会被分割成多个独立页面,里面的内容就能进行分页展示一般会配合UIPageControl增强 ...

  8. java图片轮播_java制作广告图片自动轮播控件

    首页图片的轮播 /** * 广告图片自动轮播控件 * */ public class ImageCycleView extends LinearLayout { /** * 上下文 */ privat ...

  9. AdPlayBanner:功能丰富、一键式使用的图片轮播插件

    概述 AdPlayBanner:功能丰富.一键式使用的图片轮播插件 详细 代码下载:http://www.demodashi.com/demo/11312.html AdPlayBanner是一个An ...

最新文章

  1. 一张图带你看清2014年就业形势-管理专业排名第一,就业难
  2. [NHibernate]基本配置与测试
  3. MySQL数据库 高级查询(一)
  4. 机房漏电产生的危害及安全隐患解决方案
  5. 分析Oracle有时会用索引来查找数据的原因-oracle执行计划
  6. 【今晚七点】:对话熊谱翔——开源RTOS与多媒体
  7. leetcode1. 两数之和(两种方法)
  8. XADD和NEG命令
  9. 较为周全的Asp.net提交验证方案 (下)
  10. JAVA命令符找不到符号_[转]Java命令行编译文件时出现的错误,找不到符号或软件包不存在等...
  11. mysql创建数据库时使用sql/wordbench使主键(primary key)自增
  12. Linux下 RabbitMQ的安装与配置
  13. jdk8 源码 比较器
  14. Liunx安装 jemalloc == 内存管理工具
  15. 修改对象的某个属性的值_如何理解Python中的面向对象编程?
  16. Golang gRPC实践 连载五 拦截器 Interceptor
  17. Dictionarystring,object性能之测试
  18. 六款Linux常用远程连接工具介绍
  19. 关于空间计量模型中自回归系数大于1的解释
  20. HTML+css实现元素居中对齐的方法

热门文章

  1. Vue.js项目去除url中的#/ - 解决篇
  2. css禁止鼠标复制文本的属性:user-select
  3. 子乐云音乐播放器源码V1.2php源码
  4. Discuz模板 轻社区Qing_freefresh 完整版
  5. linux getdents 例子,Linux那些事儿之我是Sysfs(12)举例三:sysfs读入文件夹内容
  6. 获取url中的参数方法,避免#的干扰,删除url指定参数(vue hash模式 有#删除指定参数问题)
  7. python拼图游戏代码,OpenCV Python实现拼图小游戏
  8. Enews博客/CMS/双模式主题源码
  9. 用ShopEx网上开店之安装Zend插件[2]
  10. CSS: HTML 和 Body 的区别