<p>
今天记录一下ViewPager一些简单的应用</p><p>跟ListView一样,也是需要使用到适配器,ViewPager的适配器使用PagerAdapter</p><p>需要注意的是ViewPager作为控件放置到布局中,要将包名也输入进去</p><p>xml文件如下:</p>
</pre><pre name="code" class="html"><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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/item_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<TextView
android:id="@+id/item_it"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
以下是完成图片的滑动切换
代码如下:
package com.example.viewpagerdemo;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
import android.app.Activity;
import android.content.pm.ActivityInfo;
public class MainActivity extends Activity implements OnPageChangeListener{
ViewPager vp;
ArrayList<View> views = new ArrayList<View>();
String[] strs = {"ahelpi1","ahelpi2","ahelpi3","ahelpi4"};
//布局过滤器
LayoutInflater li;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//实例布局过滤器
li = LayoutInflater.from(this);
//设置内容的方法要在ViewPager前调用
setContent();
vp = (ViewPager) findViewById(R.id.viewPager);
//创建适配器对象
MyAdapter my = new MyAdapter();
//有ViewPager调用setAdapter()方法,就能自动调用。
vp.setAdapter(my);
//设置当前元素
vp.setCurrentItem(2);
//设置监听者
vp.setOnPageChangeListener(this);
}
/**
* 设置内容
*/
public void setContent() {
for (int i = 0; i < 4; i++) {
//第一个参数为布局文件的id,返回的是View,把文件过滤返回成View
View view = li.inflate(R.layout.viewpager_item, null);
//Activity的findViewById()只能找到当前布局的空间,不能切换View
ImageView iv = (ImageView) view.findViewById(R.id.item_iv);
TextView tv = (TextView) view.findViewById(R.id.item_it);
String name = strs[i];
int id = getResources().getIdentifier(name, "drawable", getPackageName());
iv.setImageResource(id);
tv.setText("第"+(i+1)+"个:");
//往集合中添加整个视图,不能只添加控件
views.add(view);
}
}
/**
* 配置ViewPager的适配器
*/
public class MyAdapter extends PagerAdapter{
/**
* 确定可以配到到ViewPager上的内容的个数
*/
@Override
public int getCount() {
return views.size();//返回集合的长度即View的个数
}
/**
* 用来判断设置到ViewPager上的内容是否是视图View
* arg1就是传进来的东西,如果arg0和arg1是一样的,代表传进来的元素是View
* 用内存地址值判断arg0和arg1是否一样
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1/*添加进来的内容是View*/;
}
/**
* 添加元素
* ViewGroup:视图组
* container:适配哪个ViewPager就显示哪个ViewPager。即表示是ViewPager
* position:即将要添加到显示范围内的视图的角标。
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
//返回的Object为添加的元素(视图)
container.addView(views.get(position));
return views.get(position);
}
/**
* 去除旧元素
* container:正在配置的ViewPager
* position:要去除的视图的角标
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// super.destroyItem(container, position, object);这个方法要去掉
// container.removeViewAt(position);
container.removeView(views.get(position));
}
}
/**
* 触摸的状态变化时,会调用此方法
*/
@Override
public void onPageScrollStateChanged(int arg0) {
System.out.println("StateChanged"+arg0);
}
/**
* 设置滑动幅度和速度切换视图
* 只有滑动才会调用此方法
* 第一个参数是触摸状态:滑动为1,停下为0;
* 第二个参数为滑动的比例:从左往右从0到将近1,从又往左从将近1到0;
* 第三个参数为滑动的像素值(px)
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
System.out.println("Scrolled---0"+arg0);
System.out.println("Scrolled---1"+arg1);
System.out.println("Scrolled---2"+arg2);
}
@Override
public void onPageSelected(int arg0/*第几个界面*/) {
//到最后一个界面
if (arg0==views.size()-1) {
// vp.setCurrentItem(0);//这个方法比较慢
vp.setCurrentItem(0, false);//如果为false快速设置到指定页面
}else if (arg0==0) {
vp.setCurrentItem(views.size()-2, false);
}
}
}