ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵

1.    首先看一些layout下的xml

[html] view plain copy

 

  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:orientation="vertical" >
  5. <android.support.v4.view.ViewPager
  6. android:id="@+id/viewPager"
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content" />
  9. <RelativeLayout
  10. android:layout_width="fill_parent"
  11. android:layout_height="wrap_content"
  12. android:orientation="vertical" >
  13. <LinearLayout
  14. android:id="@+id/viewGroup"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:layout_alignParentBottom="true"
  18. android:layout_marginBottom="30dp"
  19. android:gravity="center_horizontal"
  20. android:orientation="horizontal" >
  21. </LinearLayout>
  22. </RelativeLayout>
  23. </FrameLayout>

使用ViewPager首先需要引入android-support-v4.jar这个jar包。自己不要忘记加

[java] view plain copy

 

  1. package com.example.viewpagerdemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.support.v4.view.PagerAdapter;
  5. import android.support.v4.view.ViewPager;
  6. import android.support.v4.view.ViewPager.OnPageChangeListener;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.view.ViewGroup.LayoutParams;
  10. import android.widget.ImageView;
  11. import android.widget.LinearLayout;
  12. public class TwoActivity extends Activity implements OnPageChangeListener{
  13. /**
  14. * ViewPager
  15. */
  16. private ViewPager viewPager;
  17. /**
  18. * 装点点的ImageView数组
  19. */
  20. private ImageView[] tips;
  21. /**
  22. * 装ImageView数组
  23. */
  24. private ImageView[] mImageViews;
  25. /**
  26. * 图片资源id
  27. */
  28. private int[] imgIdArray ;
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.activity_main);
  33. ViewGroup group = (ViewGroup)findViewById(R.id.viewGroup);
  34. viewPager = (ViewPager) findViewById(R.id.viewPager);
  35. //载入图片资源ID
  36. imgIdArray = new int[]{R.drawable.item01, R.drawable.item02, R.drawable.item03, R.drawable.item04,
  37. R.drawable.item05,R.drawable.item06, R.drawable.item07, R.drawable.item08};
  38. //将点点加入到ViewGroup中
  39. tips = new ImageView[imgIdArray.length];
  40. for(int i=0; i<tips.length; i++){
  41. ImageView imageView = new ImageView(this);
  42. imageView.setLayoutParams(new LayoutParams(10,10));
  43. tips[i] = imageView;
  44. if(i == 0){
  45. tips[i].setBackgroundResource(R.drawable.page_indicator_focused);
  46. }else{
  47. tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
  48. }
  49. LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
  50. LayoutParams.WRAP_CONTENT));
  51. layoutParams.leftMargin = 5;
  52. layoutParams.rightMargin = 5;
  53. group.addView(imageView, layoutParams);
  54. }
  55. //将图片装载到数组中
  56. mImageViews = new ImageView[imgIdArray.length];
  57. for(int i=0; i<mImageViews.length; i++){
  58. ImageView imageView = new ImageView(this);
  59. mImageViews[i] = imageView;
  60. imageView.setBackgroundResource(imgIdArray[i]);
  61. }
  62. //设置Adapter
  63. viewPager.setAdapter(new MyAdapter());
  64. //设置监听,主要是设置点点的背景
  65. viewPager.setOnPageChangeListener(this);
  66. //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
  67. viewPager.setCurrentItem((mImageViews.length) * 100);
  68. }
  69. /**
  70. *
  71. * @author xiaanming
  72. *
  73. */
  74. public class MyAdapter extends PagerAdapter{
  75. @Override
  76. public int getCount() {
  77. return Integer.MAX_VALUE;
  78. }
  79. @Override
  80. public boolean isViewFromObject(View arg0, Object arg1) {
  81. return arg0 == arg1;
  82. }
  83. @Override
  84. public void destroyItem(View container, int position, Object object) {
  85. ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
  86. }
  87. /**
  88. * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键
  89. */
  90. @Override
  91. public Object instantiateItem(View container, int position) {
  92. ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0);
  93. return mImageViews[position % mImageViews.length];
  94. }
  95. }
  96. @Override
  97. public void onPageScrollStateChanged(int arg0) {
  98. }
  99. @Override
  100. public void onPageScrolled(int arg0, float arg1, int arg2) {
  101. }
  102. @Override
  103. public void onPageSelected(int arg0) {
  104. setImageBackground(arg0 % mImageViews.length);
  105. }
  106. /**
  107. * 设置选中的tip的背景
  108. * @param selectItems
  109. */
  110. private void setImageBackground(int selectItems){
  111. for(int i=0; i<tips.length; i++){
  112. if(i == selectItems){
  113. tips[i].setBackgroundResource(R.drawable.page_indicator_focused);
  114. }else{
  115. tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
  116. }
  117. }
  118. }
  119. }

代码下载

上面的代码中,当只有3张图片或者2张图片的时候,滑动存在BUG问题的修改如下

  • destroyItem(View container, int position, Object object)方法中不removeView
[java] view plain copy

 

  1. @Override
  2. public void destroyItem(View container, int position, Object object) {
  3. //          ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
  4. }
  • instantiateItem(View container, int position)增加异常扑捉
[java] view plain copy

 

  1. @Override
  2. public Object instantiateItem(View container, int position) {
  3. try {
  4. ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0);
  5. }catch(Exception e){
  6. //handler something
  7. }
  8. return mImageViews[position % mImageViews.length];
  9. }

Android 使用ViewPager实现左右循环滑动图片

Android 使用ViewPager实现左右循环滑动图片的更多相关文章

  1. Android使用ViewPager实现左右循环滑动及轮播效果

    边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其 ...

  2. Android使用ViewPager实现无限循环滑动及轮播(附源代码)

    MainActivity例如以下: package cc.ww; import java.util.ArrayList; import android.app.Activity; import and ...

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

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

  4. android笔记:ViewPager实现界面的滑动

    最近在学习ViewPager实现界面的滑动,拜读了郭神的博客文章,并抽取归纳了自己对ViewPager的理解. ViewPager实现界面滑动的步骤如下: 1.在xml布局内加入控件android.s ...

  5. android 解决ViewPager双层嵌套的滑动问题

    解决ViewPager双层嵌套的滑动问题 今天我分享一下ViewPager的双层嵌套时影响内部ViewPager的触摸滑动问题 之前在做自己的一个项目的时候,遇到广告栏图片动态切换,我第一时间想到的就 ...

  6. android 自定义Viewpager实现无限循环

    ; i < imageUrls.length; i ++){ ADInfo info = new ADInfo(); info.setUrl(imageUrls[i]); info.setCon ...

  7. Android之ViewPager组件实现左右滑动View

    什么是ViewPager VIewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用来实现左右滑动切换View的效果.如果想向下兼容需要 android-support-v4.j ...

  8. 详细分析Android viewpager 无限循环滚动图片

    由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...

  9. android:使用gallery和imageSwitch制作可左右循环滑动的图片浏览器

    为了使图片浏览器左右无限循环滑动 我们要自己定义gallery的adapter 假设要想自己定义adapter首先要了解这几个方法 @Override public int getCount() { ...

随机推荐

  1. ASP.Net MVC 之FileResult

    FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端.ASP.NET MVC定义了三个具体的FileResult,分 ...

  2. Xaml 页面布局学习

    对于一开始设计xaml界面的初学者,总是习惯性的拖拽控件进行布局,这样也许方便.简单.快捷,但偶尔会出现一些小错误, 当需要将控件进行很细微的挪动时也比较吃力. 这里,我个人建议用一些代码将xaml界 ...

  3. 高放的c++学习笔记之模板与泛型编程

    函数模板 作用 有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用. 我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独 ...

  4. linux 防火墙--firewalld学习

    firewalld是centos7默认的防火墙,相比于iptables重要的优势: 1 支持动态更新: 2 不用重启服务: 同时增加了防火墙的“zone”概念,具体差异没做过多了解,这篇文章只记录fi ...

  5. 周末献礼 MyVoix2.0.js 麦克风波形绘制(一)

    最近更新了之前发布的语音识别框架MyVoix,加入了麦克风的波形分析效果.没有看过MyVoix介绍的同学请猛戳(传送门) Github地址 在新的更新中,波形分析可以绑定麦克风源,也可以单独配合别的音 ...

  6. c++学习笔记和思考

    1.内置类型:int float等编程语言自己定义的类型 类类型:自己声明的类,即是对对象的抽象 2.const double *cp 表示cp是指向一个const类型double类型数据的指针,而非 ...

  7. css3 之表格隔行分色显示

    <html> <head> <title></title> <style type="text/css"> table{ ...

  8. java.io.FileNotFoundException: /exapp/hadoop/name/current/VERSION (Permission denied)

    http://blog.csdn.net/blackiez/article/details/8570395

  9. web前端框架选型

    1.1.界面使用脚本语言有html5,php5,css3,js动态库jquery等 1.2.html采用技术为最新html5技术,html5生成的页面在phone.pad.Phablets.pc也可方 ...

  10. java调优随记-java对象大小

    在java中,基本数据类型的大小是固定.但是java对象的大小是不固定的,需要通过计算. 在java中,一个空对象(没有属性和方法的对象)在堆中占用8byte,比如 Object obj = new ...