ViewPager的欢迎界面

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值