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. junit测试用例加载spring配置文件

    junit加载pom引用项目的xml配置文件,如果定义了<beans profile="dev">,必须在测试用例类上面加上标记 @ActiveProfiles(&qu ...

  2. 使用JQuery获取对象的几种方式

    1.先讲讲JQuery的概念 JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队.其实 JQuery是一个JavaScript的类 ...

  3. maven项目,去除jar包中的不想要的依赖关系(Document root element "beans", must match DOCTYPE root "null". )

    maven dependencies中并不会删除 以下方法maven dependencies中并不会删除,可能程序引入的时候,会去掉这种依赖(猜的) 解释: 就是说项目中要用到某一个a.jar包,通 ...

  4. Swift中出现“no such module cocoa”的错误

    在Swift开发中,新建了一个UIViewController的子类出现“No such module 'Cocoa' 的错误, 头部是import cocoa.. 原因很简单:在建立新的File文件 ...

  5. 堆/栈的比较 以及 malloc/new动态内存的开辟

    堆与栈的比较:1.申请方式(1)栈(satck):由系统自动分配.(2)堆(heap):需程序员自己申请(c:调用malloc,realloc,calloc申请 free 来释放),并指明大小,并由程 ...

  6. Qt 数据库创建表失败原因之数据库关键字

    本人数据库新手,在创建表时出现问题,最后经查证,找出问题所在.下面的程序是部分节选,在创建数据库表的时候,起先使用的L24的CreateDB,经测试,一直输出 Create testResult Fa ...

  7. QT 5.1.1 for Android 开发环境搭建与配置【Windows 7】

    前言:本人操作系统为Windows7 64位,用的是32位的安装包,32位系统没有验证. 一.首先下载以下安装包,如果提供的链接失效请自行下载: (1) Android SDK (Windows 32 ...

  8. cocos2d-x创建新项目模板

    1.起因 长期使用项目中自带的HelloWorldScene来创建模板工程,不知大家有木有感到厌烦? 我是个懒人,所以就弄了个新的模板工程.这样最起码可以不用每次都把HelloWorldScene删掉 ...

  9. 关于C++中的虚拟继承的一些总结

    1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念.虚拟基类是为解决多重继承而出现的.如:类D继承自类B1.B2,而类B1.B2都继承自类A,因此在类D中两次出现类A中的变量和函数.为了节省内存 ...

  10. 32位和64位adb下载及安装

    一.已安装android sdk时 1.拷贝 从%ANDROID_HOME/platform-tools 下拷贝如下文件到/System32和/SysWOW64下即可. adb.exe AdbWinA ...