应用中常常遇到图片轮播的需求,这时候就需要用到viewpager这个组件。viewpager是android support v4 中提供的一个组件。viewpager使用需要以下几步骤:

1.在布局文件中添加viewpager组件

1 <android.support.v4.view.ViewPager
2         android:id="@+id/vp_adv"
3         android:layout_width="match_parent"
4         android:layout_height="match_parent">
5     </android.support.v4.view.ViewPager>

ViewPager路径要写完整,否则会出现问题;

2.创建PagerAdapter,PagerAdapter是viewPager的内容提供者,这里我们的图片就是由PagerAdapter提供给viewpager展示的。同样PagerAdapter也在support v4包中。具体如下所示:

 1 public class AdvertisingAdapter extends PagerAdapter {
 2
 3     private List<View> mList;
 4
 5     public AdvertisingAdapter() {
 6         mList = new ArrayList<View>();
 7     }
 8
 9     public void setData(List<View> list) {
10         if (list != null) {
11             mList.clear();
12             mList.addAll(list);
13             notifyDataSetChanged();
14         }
15     }
16
17     @Override
18     public int getCount() {
19         return mList.size();
20     }
21
22     @Override
23     public boolean isViewFromObject(View view, Object object) {
24         return object == view;
25     }
26
27     @Override
28     public void destroyItem(ViewGroup container, int position, Object object) {
29         container.removeView(mList.get(position));
30     }
31
32     @Override
33     public Object instantiateItem(ViewGroup container, int position) {
34         container.addView(mList.get(position), 0);
35         return mList.get(position);
36     }
37 }

3.初始化ViewPager,PagerAdapter

1     protected void setupView() {
2         mPagerAdapter = new AdvertisingAdapter();
3         mViewPager = (ViewPager) findViewById(R.id.vp_adv);
4         mViewPager .setAdapter(mPagerAdapter );
5         mAdvertising.addOnPageChangeListener(this);
6     }    

待PagerAdapter填充图片数据后,ViewPager便可以将图片展示出来。

4.添加“.”。基本所有应用使用到ViewPager都会使用“.”标识当前坐标,即展示到哪一页。如下代码添加点号:

添加布局文件

1 <LinearLayout
2         android:id="@+id/viewGroup"
3         android:layout_width="wrap_content"
4         android:layout_height="wrap_content"
5         android:layout_alignParentBottom="true"
6         android:layout_alignParentRight="true"
7         android:layout_marginBottom="20dp"
8         android:layout_marginRight="20dp"
9         android:orientation="horizontal"></LinearLayout>

在布局里面动态添加“点”的view

 1         imageViews = new ImageView[advPics.size()];
 2         ImageView imageView;
 3         for (int i = 0; i < advPics.size(); i++) {
 4             imageView = new ImageView(this);
 5             imageView.setLayoutParams(new LinearLayout.LayoutParams(50, 50));
 6             imageView.setPadding(15, 15, 15, 15);
 7             imageViews[i] = imageView;
 8             if (i == 0) {
 9                 imageViews[i].setImageResource(R.drawable.dot_focus);
10             } else {
11                 imageViews[i].setImageResource(R.drawable.dot_blur);
12             }
13             llDot.addView(imageViews[i]);
14         }

拖动ViewPager时,坐标点动态改变

 1   @Override
 2     public void onPageSelected(int position) {
 3         LogUtils.d("enter onPageSelected method");
 4
 5         for (int i = 0; i < advPics.size(); i++) {
 6             imageViews[position].setImageResource(R.drawable.dot_focus);
 7             if (position != i) {
 8                 imageViews[i].setImageResource(R.drawable.dot_blur);
 9             }
10         }
11     }

5.自动轮播。大多数时候,我们展示图片时需要其自动轮播的。

启动线程,控制轮播时间,及发出轮播请求给UI线程

 1 private void initAutoThread() {
 2         Runnable runnable = new Runnable() {
 3             @Override
 4             public void run() {
 5                 while (true) {
 6                     if (!isPlayPaused.get()) {
 7                         sendUiMessage(MSG_UI_CHANGE_ADV_PIC, what.get(), 0, null);
 8                         what.incrementAndGet();
 9                         if (what.get() > advPics.size() - 1) {
10                             what.getAndAdd(-advPics.size());
11                         }
12                     }
13                     if (needExit.get()) {
14                         break;
15                     }
16                     try {
17                         Thread.sleep(8000);
18                     } catch (InterruptedException e) {
19                         e.printStackTrace();
20                     }
21                 }
22             }
23         };
24         Thread thread = new Thread(runnable);
25         thread.setName("Carousel");
26         thread.start();
27     }

UI 线程收到请求后,对显示的图片进行更改

1  mViewPager.setCurrentItem(msg.arg1);

转载于:https://www.cnblogs.com/pillowzhou/p/4983740.html

用viewpager实现图片轮播相关推荐

  1. 安卓开发——基于ViewPager的图片轮播

    概述: 要用ViewPager实现图片轮播,主要是两步: 1:用PagerAdapter使图片可以滑动切换 2:用Handler来实现图片自动轮播 页面布局部分的代码: <?xml versio ...

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

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

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

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

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

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

  5. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...

  6. ViewPager简单使用(四)实现图片轮播

    在很多软件中,我们都会看到图片轮播的效果.如图: 首先在布局文件中添加viewpager控件 activity_main.xml <?xml version="1.0" en ...

  7. viewpager实现花式图片轮播

    效果图 首先,让我们了解下什么是viewpager: 这个大致意思是:这个布局管理器允许用户左右翻转并传递页面的数据,你想要的视图可以通过pagerAdapter来实现. 布局文件: <Fram ...

  8. android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...

    Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...

  9. 安卓首页图片轮播效果(淘宝、京东首页广告效果)

    2019独角兽企业重金招聘Python工程师标准>>> 直奔主题: 1.主要原理就是利用定时任务器定时切换ViewPager的页面. 2.里面用了一个读取网络图片的插件,做客户端使用 ...

  10. 图片轮播器,relativelayout,外加textview小结

    十多个textview,外加三个relativelayout,心烦的是图片轮播器,就环境老玄了,写了三个图片轮播器才成功,直接来代码吧,gogogo. Activity_main.xml <?x ...

最新文章

  1. 一文盘点MWC 2019所有5G设备和研发进展
  2. 《JAVA与模式》之命令模式
  3. python mysql索引 优化神器explain 慢查询
  4. 使用Chrome DevTools的Timeline和Profiles提高Web应用程序的性能
  5. 删除联想OEM分区的方法 推荐!
  6. Go 语言简介(下)— 特性
  7. 二月草的博客开通啦……
  8. Java 读写txt文件 中文乱码问题
  9. Shared File System Master Slave 全配置以及测试
  10. 全网首发:怎样制作CDKEY(3)-加密
  11. Ambari安装和汉化(转)
  12. Android多国语言缩写(全)
  13. Android webview数据获取 webview抓取
  14. Kubernetes 中的 requests 和 limits详解
  15. Node对象的一些方法
  16. 幼儿体能五项技能测试软件,卓艺湖畔幼儿园教师五项体能培训--器械游戏分享...
  17. 少儿编程航天主题,scratch与航天航空主题:八大行星排排序
  18. package.json字段详解
  19. 图片合成视频 linux,ffmpeg安装在Linux下,并将图片合成视频
  20. QT 串口通信,操作程控电源 Agilent 66312A

热门文章

  1. GitHub上IOS开源项目
  2. 专题:Windows编译x264、SDL、faac、ffmpeg过程
  3. interview material
  4. 关于LightMapping和NavMesh烘焙的动态载入
  5. 2012年总结:转折、发展、把握机遇
  6. 『参考』.net CF组件编程(1)——基础之后
  7. HTML 转 PDF的两种实现方式
  8. Centos 解压软件
  9. 在OpenGL中使用FreeImage库生成纹理
  10. 记一次RAID阵列的迁移经历