android 中 ViewPager 的平常用法 ViewPager+ Views
延续前面几个的经常用到的ViewPager, 直接加载各种不同的 View
工程目录:
代码:
public class ViewActivity extends Activity {
	// 每个View的图片
	private int[] images = { R.drawable.guide_1,R.drawable.guide_3,
			R.drawable.guide_5,  R.drawable.guide_6, R.drawable.guide_7 };
	//所有的View
	private List<View> list_views = new ArrayList<View>();
	private ViewPager pager;
	private ImageView start;
	private ImageView curDot;
	private LinearLayout  linear_all_point; // 指示器图标view
	private int offset;              // 位移量
	private int nowPosition;          // 记录当前的位置
	private GuidePagerAdapter adapter;
	Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 0:
				start.setVisibility(View.VISIBLE);
				break;
            case 1:
            	start.setVisibility(View.GONE);
				break;
			}
		}
	};
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.main);
		init();
	}
	private ImageView buildImageView(int id){
		ImageView iv = new ImageView(this);
		iv.setImageResource(id);
		ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
				ViewGroup.LayoutParams.FILL_PARENT,
				ViewGroup.LayoutParams.FILL_PARENT);
		iv.setLayoutParams(params);
		iv.setScaleType(ScaleType.FIT_XY);
		return iv;
	}
	//功能介绍界面的初始化
	private void init(){
		{
			linear_all_point = (LinearLayout)this.findViewById(R.id.dot_contain);
			pager = (ViewPager) findViewById(R.id.contentPager);
			curDot = (ImageView) findViewById(R.id.cur_dot);
			start = (ImageView) findViewById(R.id.open);
		}
		{ //初始化点 每个底部小点的指示器哦。
			for(int i=0; i< images.length; i++){
				ImageView dotView = new ImageView(this);
				dotView.setImageResource(R.drawable.dot1_w);
				dotView.setLayoutParams(new LinearLayout.LayoutParams(
						ViewGroup.LayoutParams.WRAP_CONTENT,
						ViewGroup.LayoutParams.WRAP_CONTENT,1.0f));
				linear_all_point.addView(dotView);
			}
		}
			ImageView imageView;
			//现在的viewpager我往里面塞的是图片,这里你也可以初始化你自己的xml
			for (int i = 0; i < images.length; i++) {
				imageView = buildImageView(images[i]);
				list_views.add(imageView);
			}
		    //当curDot的所在的树形层次将要被绘出时此方法被调用
		    curDot.getViewTreeObserver().addOnPreDrawListener(
				new OnPreDrawListener() {
					public boolean onPreDraw() {
						// 获取ImageView的宽度也就是点图片的宽度
						offset = curDot.getWidth();
						return true;
					}
			});
		    adapter = new GuidePagerAdapter(list_views);
			// ViewPager设置数据适配器,这个类似于使用ListView时用的adapter
			pager.setAdapter(adapter);
			pager.clearAnimation();
			// 为Viewpager添加事件监听器 OnPageChangeListener
			pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
				@Override
				public void onPageSelected(int position){
					//移动下面的小点指示器
					moveCursorTo(position);
					if (position == images.length-1) {// 到最后一张了
						handler.sendEmptyMessageDelayed(0, 500);					
					} else if (nowPosition == images.length - 1) {
						handler.sendEmptyMessageDelayed(1, 100);
					}
					nowPosition = position;
					super.onPageSelected(position);
				}
			});
	}
	//指示器
	private void moveCursorTo(int position) {
		AnimationSet animationSet = new AnimationSet(true);
		TranslateAnimation tAnim = new TranslateAnimation(offset* nowPosition, offset * position, 0, 0);
		animationSet.addAnimation(tAnim);
		animationSet.setDuration(10);
		animationSet.setFillAfter(true);
		curDot.startAnimation(animationSet);
	}
	// ViewPager 适配器
	class GuidePagerAdapter extends PagerAdapter{
		private List<View> views;
		public GuidePagerAdapter(List<View> views){
			this.views=views;
		}
		@Override
		public void destroyItem(View arg0, int position, Object arg2) {
			((ViewPager) arg0).removeView(views.get(position));
		}
		@Override
		public void finishUpdate(View arg0) {
		}
		@Override
		public int getCount() {
			return views.size();
		}
		@Override
		public Object instantiateItem(View arg0, int position) {
			((ViewPager) arg0).addView(views.get(position),0);
			return views.get(position );
		}
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == (arg1);
		}
		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
		}
		@Override
		public Parcelable saveState(){
			return null;
		}
		@Override
		public void startUpdate(View arg0){	
		}
	}
}
xml 文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <android.support.v4.view.ViewPager
android:id="@+id/contentPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:flipInterval="30"
android:persistentDrawingCache="animation" /> <FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:layout_marginBottom="22.0dip">
<LinearLayout
android:id="@+id/dot_contain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
</LinearLayout> <ImageView
android:id="@+id/cur_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dot2_w" />
</FrameLayout> <ImageView
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:clickable="true"
android:src="@drawable/ic_open"
android:visibility="gone" /> </RelativeLayout>
图片什么的都自己找吧,老早以前的代码了= =,
android 中 ViewPager 的平常用法 ViewPager+ Views的更多相关文章
- android中Handle类的用法
		android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ... 
- [转]Android中Application类的用法
		原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ... 
- Android(java)学习笔记120:Android中的Application类用法
		1.简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是 ... 
- Android中的Selector的用法
		转自: Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist ... 
- Android(java)学习笔记61:Android中的 Application类用法
		1. 简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就 ... 
- Android中Calendar类的用法总结
		Calendar是Android开发中需要获取时间时必不可少的一个工具类,通过这个类可以获得的时间信息还是很丰富的,下面做一个总结,以后使用的时候就不用总是去翻书或者查资料了. 在获取时间之前要先获得 ... 
- android中PreferenceScreen类的用法
		PreferenceScreen preference是偏好,首选的意思,PreferenceScreen个人翻译成 “偏好显示”,明白这个意思就好,就是说根据特点灵活的定义显示内容风格,一个屏幕可以 ... 
- 三、android中Handle类的用法
		当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉.Ha ... 
- 关于java、Android中Math的一些用法
		java.math.Math类常用的常量和方法: Math.PI 记录的圆周率Math.E记录e的常量Math.abs 求绝对值Math.sin 正弦函数 Math.asin 反正弦函数Math.co ... 
随机推荐
- 用Fragment制作的Tab页面产生的UI重叠问题
			本文出处:http://blog.csdn.net/twilight041132/article/details/43812745 在用Fragment做Tab页面,发现有时候进入应用会同时显示多个T ... 
- MySQL双机热备份
			系统: CentOS release 6.6 (Final) MySQL: mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) ... 
- CSS3中的Transition属性详解(贝赛尔曲线)
			transition语法: transition : [<'transition-property'> || <'transition-duration'> || <'t ... 
- centos的安装,网络的调试
			因业务需要,我今天尝试为公司服务器安装centos,选择的版本是6.7 第一步,下载:http://isoredirect.centos.org/centos/6/isos/x86_64/ 
- kettle etl
			使用注意点 1 如果服务器资源有限的话,尽量少开任务窗口,但是要有容错机制,可以分为按天按分钟 2 如果不想写较长的sql可以用detail来启动 3 在设置每天提交的条数时,如果数据很少,而设置值很 ... 
- Linux开启关闭redis
			1.启动:redis-server(redis-server redis.conf) 2.登陆:redis-cli(redis-cli -p 6379) 3.关闭:redis-cli shutdown 
- spring-data-elasticsearch整合elasticsearch
			花了一个晚上 整合最新版本的spring-data-elasticsearch与elasticsearch,遇到各种版本冲突 之类的问题,测试效果如图: facet搜索: 
- Linux splint命令
			一.简介 splint是一个针对C语言的开源程序静态分析工具. 二.安装配置 1)yum安装 yum install -y splint 2)源码安装 http://www.splint.org/ 配 ... 
- jquery 插件原则
			区分开 Dom 对象,jQuery Dom对象, Json数据. Dom对象是诸如: document.getElementById 返回的原生Dom对象. jQuery Dom对象,如:$(&quo ... 
- Spec模板
			Spec模板 一.概述 1.项目背景 图书馆在正常运营中面对大量书籍.读者信息以及两者间相互联系产生的借书信息.还书信息.现有的人工记录方法既效率低又错误过多,大大影响了图书馆 ... 
