ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。
下面我们先简单介绍一下ViewPager
1.ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
2.ViewPager类需要一个PagerAdapter适配器类给它提供数据。
3.ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。(这个今天的应用暂时用不到)
下面我们开始看代码
activity_main.xml
<?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" >
<RelativeLayout
android:id="@+id/mylovemodelactivity_myframelayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<android.support.v4.view.ViewPager
android:id="@+id/helpcentershowactivity_vp"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<!-- 最后页面跳转按钮 -->
<Button
android:id="@+id/ljtyButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/gallery_page"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:background="@drawable/at_once_go"
android:visibility="invisible" />
<!-- 进度小圆点 -->
<LinearLayout
android:id="@+id/gallery_page"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:paddingBottom="20dp" >
<ImageView
android:id="@+id/newguideactivity_dot_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:src="@drawable/point_down" />
<ImageView
android:id="@+id/newguideactivity_dot_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:src="@drawable/point_up" />
<ImageView
android:id="@+id/newguideactivity_dot_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:src="@drawable/point_up" />
<ImageView
android:id="@+id/newguideactivity_dot_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:src="@drawable/point_up" />
<ImageView
android:id="@+id/newguideactivity_dot_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:src="@drawable/point_up" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
GalleryAdapter.java
package com.yitong.viewpagerdemo;
import java.io.InputStream;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Gallery;
import android.widget.ImageView;
public class GalleryAdapter extends PagerAdapter {
private String[] picNames;
private ArrayList<ImageView> images = null;
private Context context = null;
/**
* 通过名称读取image 避免一次加载过多造成内存溢出
*
*/
@SuppressWarnings("deprecation")
public GalleryAdapter(Context ctx, String[] picNames) {
this.context = ctx;
this.picNames = picNames;
images = new ArrayList<ImageView>();
for (int i = 0; i < picNames.length; i++) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
try {
InputStream assetFile = null;
// 默认加载第0个
assetFile = context.getAssets().open(picNames[i]);
// 用来存储图片资源 仅仅创建一个,过度即时销毁
Bitmap imgBitMap;
BitmapDrawable bd;
imgBitMap = BitmapFactory.decodeStream(assetFile);
bd = new BitmapDrawable(context.getResources(), imgBitMap);
imageView.setBackgroundDrawable(bd);
} catch (Exception e) {
e.printStackTrace();
}
images.add(imageView);
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return picNames.length;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
view.addView(images.get(position % picNames.length));
return images.get(position % picNames.length);
}
@Override
public void destroyItem(ViewGroup view, int position, Object object) {
// 从viewpager里移除childview
view.removeView(images.get(position % picNames.length));
}
/**
* 清空刷新內存
*
* @Description
*/
public void clearHeap() {
if (picNames != null && picNames.length > 0) {
try {
for (int i = 0; i < images.size(); i++) {
BitmapDrawable bd = (BitmapDrawable) images.get(i)
.getBackground();
images.get(i).setBackgroundResource(0);// 别忘了把背景设为null,避免onDraw刷新背景时候出现used
// a recycled
// bitmap错误
bd.setCallback(null);
bd.getBitmap().recycle();
}
// 清空内存
System.gc();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
MainActivity.java
package com.yitong.viewpagerdemo;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnClickListener {
private ArrayList<ImageView> dots;
private ViewPager viewPager;
private GalleryAdapter madapter;
private Button ljtyButton;
// 图片资源名称数组
private String[] picNames;
private void inintPictureArray() {
picNames = new String[] { "gallery_1.png", "gallery_2.png",
"gallery_3.png", "gallery_4.png", "gallery_5.png" };
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inintPictureArray();
initAd();
ljtyButton = (Button) findViewById(R.id.ljtyButton);
ljtyButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// 跳转事件 当页面到最后的时候出现按钮进行跳转
if (v == ljtyButton) {
Intent intent = new Intent(this, WeclomeActivity.class);
intent.putExtra("ISFRIST", true);
startActivity(intent);
finish();
madapter.clearHeap();
}
}
private boolean isChange = false;
private ImageView dot_0;
private ImageView dot_1;
private ImageView dot_2;
private ImageView dot_3;
private ImageView dot_4;
@SuppressWarnings("deprecation")
public void initAd() {
// 将下面的进度图片放在list中
dots = new ArrayList<ImageView>();
dot_0 = (ImageView) findViewById(R.id.newguideactivity_dot_0);
dot_1 = (ImageView) findViewById(R.id.newguideactivity_dot_1);
dot_2 = (ImageView) findViewById(R.id.newguideactivity_dot_2);
dot_3 = (ImageView) findViewById(R.id.newguideactivity_dot_3);
dot_4 = (ImageView) findViewById(R.id.newguideactivity_dot_4);
dots.add(dot_0);
dots.add(dot_1);
dots.add(dot_2);
dots.add(dot_3);
dots.add(dot_4);
viewPager = (ViewPager) findViewById(R.id.helpcentershowactivity_vp);
madapter = new GalleryAdapter(this, picNames);
viewPager.setAdapter(madapter);
// viewPager.setOnTouchListener(this);
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
int oldPosition = 0;
// 滑动监听
public void onPageSelected(int position) {
dots.get(position % picNames.length).setImageResource(
R.drawable.point_down);
dots.get(oldPosition).setImageResource(R.drawable.point_up);
oldPosition = position % picNames.length;
// 当欢迎页面滑倒最后一行 显示跳转按钮
if (position == 4) {
isChange = true;
ljtyButton.setVisibility(View.VISIBLE);
} else {
isChange = false;
ljtyButton.setVisibility(View.INVISIBLE);
}
}
public void onPageScrolled(int position, float arg1, int arg2) {
}
public void onPageScrollStateChanged(int position) {
}
});
}
}
Demo下载连接
http://download.csdn.net/detail/daniu52100/9482183