ViewPager也算是Android自带的常用控件之一,但是有可能会无法直接调用,所以只需要将工程目录里/libs/android-support-v4.jar该jarAdd to Build Path就可以了。

先来看看效果图吧:

                                                          

一、首先完成布局文件:

从效果图可以分析出,整体的布局为一个RelativeLayout布局,上面是一个ViewPager,下面是一个LinearLayout,在LinearLayout里面,有一个TextView 和 几个小圆点,所以可以很容易的写出布局文件了。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="200dip" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical" > <TextView
android:id="@+id/image_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/app_name"
android:textColor="@android:color/white"
android:textSize="18sp" /> <LinearLayout
android:id="@+id/point_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" /> </LinearLayout> </RelativeLayout>

二、在MainActivity中加载布局文件

1.通过ID查找出各个控件。

                ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
LinearLayout pointGroup = (LinearLayout) findViewById(R.id.point_group);
TextView imageDesc = (TextView) findViewById(R.id.image_desc);

2.初始化图片资源和指示点。

		ArrayList<ImageView> imageList = new ArrayList<ImageView>();
for(int i = 0; i<imageIds.length;i++) { // 初始化图片资源
ImageView image = new ImageView(this);
image.setBackgroundResource(imageIds[i]);
imageList.add(image); // 添加指示点
ImageView point = new ImageView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(5, 5);
params.rightMargin = 20;
point.setLayoutParams(params); point.setBackgroundResource(R.drawable.point_bg);
if(i==0) {
point.setEnabled(true);
} else {
point.setEnabled(false);
}
pointGroup.addView(point);
}

这个代码,先是创建了一个ArrayList来保存图片资源,然后通过一个循环,将每一张图片加载进入imageList,在加载图片的同时,也将指示点添加进入pointGroup指示点的资源ID--R.drawable.point_bg,是通过自己在/res/drawable中自己创建得来的,在drawable文件夹中,创建了三个XML文件,分别用来绘制不同状态的指示点。

其中point_bg.xml文件代码为:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/point_nomal" android:state_enabled="false"></item>
<item android:drawable="@drawable/point_focured" android:state_enabled="true"></item> </selector>

point_nomal.xml文件代码为:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"> <size android:width="5dip"
android:height="5dip"/>
<solid android:color="#55000000"/> </shape>

point_focured.xml文件代码为:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"> <size android:width="5dip"
android:height="5dip"/>
<solid android:color="#aaFFFFFF"/> </shape>

3.将资源添加进入viewPager。

		viewPager.setAdapter(new MyPagerAdapter());
private class MyPagerAdapter extends PagerAdapter { /**
* 获得页面的总数
*/
@Override
public int getCount() {
return Integer.MAX_VALUE; // 因为需要无限循环,所以这里就不写imageList.size()
} /**
* 获得相应位置上的view
* container view的容器,其实就是viewpager自身
* position 相应的位置
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 给container添加内容
container.addView(imageList.get(position%imageList.size())); return imageList.get(position%imageList.size());
} /**
* 判断view和object的对应关系
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} /**
* 销毁对应位置上的object
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
object = null;
}
}

现在就完成了基本的设置了,可以运行程序看一下效果了,现在已经可以循环的左右切换了。

三、增加自动切换

想要实现自动切换的方法比较多,大概分为:使用定时器;开启子线程;使用ColckManager;用handler发送延时信息。在此我们采用比较简单的方式--用handler发送延时信息。

	// 判断是否执行动画
private boolean isRunning = false;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
// 滑动到下一页
viewPager.setCurrentItem(viewPager.getCurrentItem()+1); if(isRunning) {
handler.sendEmptyMessageDelayed(0, 2000);
}
};
};

以上代码建立在onCreate()外,用于判断是否接收到了handler发送来的信息,如果接收到了,就将viewpager的显示后移一位延时2000毫秒后再发送出去。

然后在onCreate()方法中添加:

		isRunning = true;
handler.sendEmptyMessageDelayed(0, 2000);

这样就完成了viewPager中图片的自动切换,但是在运行程序后发现,图片下面的Text和指示点并没有跟着切换,所以还需要添加一下代码:

		viewPager.setOnPageChangeListener(new OnPageChangeListener() {

			/**
* 页面切换后调用
* postion 新的页面位置
*/
@Override
public void onPageSelected(int position) { position = position%imageList.size(); // 设置文字描述内容
imageDesc.setText(imageDescriptions[position]);
// 改变指示点的状态
pointGroup.getChildAt(position).setEnabled(true);
pointGroup.getChildAt(lastPointPosition).setEnabled(false);
lastPointPosition = position;
} /**
* 当页面正在滚动的时候
*/
@Override
public void onPageScrolled(int position, float positionOffset, int arg2) { } /**
* 当页面状态发生变化的时候
*/
@Override
public void onPageScrollStateChanged(int arg0) { }
});

setOnPageChangeListener()是一个监听ViewPager页面变化的方法,其实的onPageSelected()是 当页面切换后调用的,在此我们重写了该方法。当切换到新的一页的时候,Text 和 指示点也跟着变换。

四、Demo下载

点我下载Demo          o(︶︿︶)o

ViewPager的基本使用--可左右循环切换也可自动切换的更多相关文章

  1. JavaScript、tabel切换完整版—自动切换—鼠标移入停止-移开运行

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ViewPager,实现真正的无限循环(定时+手动)

    利用定时器,实现循环轮播,很简单:只需在定时器的消息里加如下代码即可: int count = adapter.getCount(); if (count > 1) { // 多于1个,才循环 ...

  3. Android实现真正的ViewPager【平滑过渡】+【循环滚动】!!!顺带还有【末页跳转】。

    实现真正的ViewPager[平滑过渡]+[循环滚动]!!!顺带还有[末页跳转]. 首先呢, 我要对网上常见的3种ViewPager的循环滚动方法做个概述.急需看真正实现方法的同志请选择性忽略下面这一 ...

  4. 封装一个ViewPager真正的实现图片无限循环滚动带导航点

    效果图: 大家在写项目的过程中常常会碰到须要实现Viewpager里面载入几张图片来循环自己主动轮播的效果,假设不封装一下的话代码分散在activity里面会显得非常乱.并且也不利于我们下次复用,所以 ...

  5. swiper轮播图(逆向自动切换类似于无限循环)

    swiper插件轮播图,默认的轮播循序是会从右向左,第一张,第二张,第三张,然后肉眼可见是的从第三张从左到右倒回第一张,这样就会有些视觉体验不高, ,不过还是能够用swiper本身的特性更改成无限循环 ...

  6. Android借助Handler,实现ViewPager中页面的自动切换(转)

    在很多电商网页及app上都有自动切换的商品的推广快,感觉体验挺不错的,正好今天学习使用ViewPager,因此也实现了一个功能类似的demo. 下面是其中的两个截图:           实现一个自动 ...

  7. 广告banner:手动滑动切换,自动切换,点击跳转,异步加载网络图片

    效果图: 该banner功能有自动切换图片,点击图片可以自定义事件,手动滑动切换,异步加载图片 代码说话: 布局文件: <!-- 广告位 --> <FrameLayout andro ...

  8. Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片

    Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...

  9. ios基础篇(二十三)—— 定时器NSTimer与图片的自动切换

    一.NSTimer NSTimer是一个能在从现在开始到后面的某一个时刻或者周期性的执行我们指定的方法的对象.可以按照一定的时间间隔,将制定的信息发送给目标对象.并更新某个对象的行为.你可以选择在未来 ...

随机推荐

  1. hibernate一对多关系配置

    一.     表信息 公司表 cId cName cAdress Null Null Null 表t_company 员工表 sId sName sAge cId Null Null Null Nul ...

  2. 创建类模式(零):简单/静态工厂(Static Factory)

    定义 简单工厂模式属于创建型模式,但不属于23种GOF设计模式之一,这也是为什么该模式标记为零的原因.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的 ...

  3. Usage of readonly and const

    Many new learners can not make sure the usage scenarios of readonly and const keywords. In my opinio ...

  4. SQL Server 数据导入Mysql详细教程

  5. spring读取properties的方法

    首先在配置文件中配置PropertyPlaceholderConfigurer 单个配置文件: <bean id="propertyConfigurer" class=&qu ...

  6. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  7. android141 360 安装软件管理java代码

    AppManagerActivity package com.itheima52.mobilesafe.activity; import android.app.Activity; import an ...

  8. C语言的ANSI/ISO标准

    摘自:http://see.xidian.edu.cn/cpp/html/1658.html 从技术上讲有两种C语言标准,一种来自ANSI(American National Standard Ins ...

  9. Android基本控件之GridView

    我们在使用手机的过程中,会看到一些图片配上文字的一些情况,今天我们就来介绍一下安卓控件的GridView GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元 ...

  10. Java中执行外部命令

    在项目中执行一个linux的shell脚本,于是需要在java环境下执行外部命令如系统命令.linux命令的需求,本人小小研究了一下,又上网查了一些资料先整理如下. java执行外部命令主要依赖两个类 ...