MainActivity
package com.android.linus;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
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.Window;
import com.java.linus.PageIndictor;
public class MainActivity extends Activity {
private ViewPager viewPager;
private List<View> mlist;
private PageIndictor pi;
private PagerAdapter adapter;
public static final int DEFAULT_PAGER = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
LayoutInflater inflater = getLayoutInflater();
mlist = new ArrayList<View>();
viewPager = (ViewPager) findViewById(R.id.pager);
pi = (PageIndictor)findViewById(R.id.idictors);
mlist.add(inflater.inflate(R.layout.intropic_1, null));
mlist.add(inflater.inflate(R.layout.intropic_2, null));
mlist.add(inflater.inflate(R.layout.intropic_3, null));
adapter = new ViewPagerAdapter();
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/**
* 面跳转完后得到调用,arg0是你当前选中的页面的position。
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected(int)
*/
@Override
public void onPageSelected(int arg0) {
pi.setCurrentPager(arg0);
}
/**
* @param arg0:当前页面,及你点击滑动的页面
* @param arg1:当前页面偏移的百分比。
* @param arg2:当前页面偏移的像素位置。
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrolled(int, float, int)
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
/**
* 此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。arg0 ==1表示正在滑动,
* arg0==2表示滑动完毕了,arg0==0表示什么都没做。当页面开始滑动的时候,
* 三种状态的变化顺序为(1,2,0)。
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrollStateChanged(int)
*/
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
pi.setIndicators(mlist.size());
pi.setCurrentPager(DEFAULT_PAGER);
}
class ViewPagerAdapter extends PagerAdapter {
/**
* PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
* @see android.support.v4.view.PagerAdapter#destroyItem(android.view.View, int, java.lang.Object)
*/
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView(mlist.get(position));
}
/**
* 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,
* 我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可
* @see android.support.v4.view.PagerAdapter#instantiateItem(android.view.View, int)
*/
@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(mlist.get(position));
return mlist.get(position);
}
/**
* 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,
* 那么这里就应该是展示的广告图片的ImageView数量
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return mlist.size();
}
/**
* 来判断显示的是否是同一张图片,
* 这里我们将两个参数相比较返回即可
* @see android.support.v4.view.PagerAdapter#isViewFromObject(android.view.View, java.lang.Object)
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
}
游标:
package com.java.linus;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.android.linus.R;
public class PageIndictor extends LinearLayout{
private Context mcontext;
// 存放的ViewPager的页面
private List<ImageView> indicators = new ArrayList<ImageView>();
// 当前显示的viewPager页面
private int currentPager = 0;
/**
* 构造函数
* @param context
*/
public PageIndictor(Context context) {
super(context);
initPageIndicator(context);
}
/**
* 构造函数
* @param context
* @param atr
*/
public PageIndictor(Context context, AttributeSet atr) {
super(context, atr);
initPageIndicator(context);
}
/**
* 初始化Indicator(LinerLayout) 的布局属性
* @param context
*/
private void initPageIndicator(Context context) {
this.mcontext = context;
// 水平布局
setOrientation(LinearLayout.HORIZONTAL);
// 居中显示
setGravity(Gravity.CENTER);
}
/**
* 重新生成导航点
* 若当前的Viewpager的页面为0 为空时
* 默认为自动添加一个导航点
*/
public void refPageIndicator() {
if (indicators.size() != 0 && indicators != null) {
for (int i = 0; i < indicators.size(); i++) {
addView(indicators.get(i));
}
}
else {
ImageView t_view = new ImageView(mcontext);
t_view.setPadding(5, 5, 5, 5);
t_view.setImageResource(R.drawable.page_indicator_s);
indicators.add(t_view);
addView(t_view);
}
}
/**
* 根据ViewPager的页面数生成相应的导航小点
* 并设置当前的导航点
* @param pagerNum ViewPager的页面数
*/
public void setIndicators(int pagerNum) {
indicators.clear();
removeAllViews();
for(int i = 0; i < pagerNum; i++) {
ImageView t_view = new ImageView(mcontext);
t_view.setPadding(5, 5, 5, 5);
t_view.setImageResource(R.drawable.page_indicator_h);
indicators.add(t_view);
}
refPageIndicator();
setCurrentPager(currentPager);
}
/**
* 将当前页面的indicator设为高亮
* 其他的indicators设为微亮
* @param currPage 当前Pager的编号
*
*/
public void setCurrentPager(int currPage) {
this.currentPager = currPage;
for (int i = 0; i < indicators.size(); i++) {
ImageView t_view = indicators.get(i);
if (i == this.currentPager)
t_view.setImageResource(R.drawable.page_indicator_s);
else
t_view.setImageResource(R.drawable.page_indicator_h);
}
}
}
效果:
csdn下载链接:http://download.csdn.net/detail/yzf0011/8084339