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. centos安装vim以及设置

    原文链接:http://www.xiaohuai.com/2884 Centos里的VI只默认安装了vim-minimal-7.x.所以无论是输入vi或者 vim查看文件,syntax功能都无法正常启 ...

  2. eclipse中build path 中JDK与java compiler compliance level的问题(转)

    roject facets做什么用? http://baike.baidu.com/view/6257360.htm,其实我感觉,就是让我们在创建项目时候,可以独立定义一个有一个模板供我们使用,在里面 ...

  3. 重置MySQL的root用户密码(Window)

    1.首先要停止Mysql服务.打开CMD,键入命令 net stop mysql 默认的mysql服务名就是mysql,如果你修改过服务名,请自行对照修改命令. 2.在CMD中进入mysql的bin目 ...

  4. 查询数据库返回List<Entity>问题

    如果判断所返回的List<Entity>是否为空不能用 list!=null,因为如果查询数据为空则会返回[],当与null判断的时候会判断为有数据,此时判断条件应该写成list.size ...

  5. 软件测试 homework1

    申明数组变量后,在使用的时候,出现了向上溢出的情况(程序运行过程中出现的),导致最后答案不正确,经过输出数组数据发现错误, 现在在申明数组的时候都会大致估算一下,确认申明什么样的数组不会导致溢出. 在 ...

  6. Java学习笔记(1):注释规范

    注释规范 1.   类注释 在每个类前面必须加上类注释,注释模板如下: 2.   属性注释 在每个属性前面必须加上属性注释,注释模板如下: 3.   方法注释 在每个方法前面必须加上方法注释,注释模板 ...

  7. cocos2dx之触摸事件

    要使精灵能够接收到触摸事件,无非要做三件事. 注册触摸事件; 接收触摸事件; 处理触摸事件. 下面就从这三点出发,来了解一下精灵如何响应触摸事件. 1.注册触摸事件 精灵类Poker继承Sprite和 ...

  8. Linux编程基础——GDB(设置断点)(转:TianFang,cnblog: http://www.cnblogs.com/TianFang/archive/2013/01/20/2868889.html)

    启动GDB后,首先就是要设置断点,程序中断后才能调试.在gdb中,断点通常有三种形式: 断点(BreakPoint): 在代码的指定位置中断,这个是我们用得最多的一种.设置断点的命令是break,它通 ...

  9. Thinkphp 空操作、空控制器、命名空间

    1.空操作 空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. http://网址/index.php/Hom ...

  10. KACK的处理方法

    demo: .eq { color:#f00;/*标准浏览器*/ color:#f30\0;/*IE8,IE9,opera*/ *color:#c00;/*IE7及IE6*/ _color:#600; ...