延续前面几个的经常用到的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的更多相关文章

  1. android中Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  2. [转]Android中Application类的用法

    原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...

  3. Android(java)学习笔记120:Android中的Application类用法

    1.简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是 ...

  4. Android中的Selector的用法

    转自: Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist ...

  5. Android(java)学习笔记61:Android中的 Application类用法

    1. 简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就 ...

  6. Android中Calendar类的用法总结

    Calendar是Android开发中需要获取时间时必不可少的一个工具类,通过这个类可以获得的时间信息还是很丰富的,下面做一个总结,以后使用的时候就不用总是去翻书或者查资料了. 在获取时间之前要先获得 ...

  7. android中PreferenceScreen类的用法

    PreferenceScreen preference是偏好,首选的意思,PreferenceScreen个人翻译成 “偏好显示”,明白这个意思就好,就是说根据特点灵活的定义显示内容风格,一个屏幕可以 ...

  8. 三、android中Handle类的用法

    当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉.Ha ...

  9. 关于java、Android中Math的一些用法

    java.math.Math类常用的常量和方法: Math.PI 记录的圆周率Math.E记录e的常量Math.abs 求绝对值Math.sin 正弦函数 Math.asin 反正弦函数Math.co ...

随机推荐

  1. 解决hibernate中的懒加载(延迟加载)问题

    解决hibernate中的懒加载(延迟加载)问题   我们在开发的时候经常会遇到延迟加载问题,在实体映射时,多对一和多对多中,多的一样的属性默认是lazy="true"(即,默认是 ...

  2. ASP.NET简单验证码

    今天写了一个特别简单的验证码实现.现将代码贴出. protected void Page_Load(object sender, EventArgs e) { CreateCheckCodeImage ...

  3. 轻量级模块化开发框架 Hasor 核心模块 v0.0.2 发布

    首先引用Wiki的介绍一下Hasor:     “Hasor是一款开源框架.它是为了解决企业模块化开发中复杂性而创建的.Hasor遵循简单的依赖.单一职责,在开发多模块企业项目中更加有调理.然 而Ha ...

  4. Dynamic CRM 2013学习笔记(四十五)修改实体及字段的前缀(不用new_开头)

    最近做一个升级的CRM项目,为了区分哪些是新增的,所以决定用一个新的前缀来定义实体及新加的字段.之前用的是new_开头,现在改成tm_开头.   原来只要是新建实体或字段都是new_开头:   1. ...

  5. 除非 Windows Activation Service (WAS)和万维网发布服务(W3SVC)均处于运行状态,否则无法启动网站。目前,这两项服务均处于停止状态。

    win7 IIS 所有网站都停止了,启动提示: 除非 Windows Activation Service (WAS)和万维网发布服务(W3SVC)均处于运行状态,否则无法启动网站.目前,这两项服务均 ...

  6. Spring-Context之二:使用Spring提供的测试框架进行测试

    Spring框架是无侵入性的,所以你的代码可以完全是POJO(plain old java object),直接使用Junit就可以完成大部分的单元测试.但是在集成测试方面就比较吃力了.单元测试层面你 ...

  7. ActiveMQ第三弹:在Spring中使用内置的Message Broker

    在上个例子中我们演示了如何使用Spring JMS来向ActiveMQ发送消息和接收消息.但是这个例子需要先从控制台使用ActiveMQ提供的命令行功能启动一个Message Broker,然后才能运 ...

  8. mysql悲观锁总结和实践

    使用场景举例:以MySQL InnoDB为例商品t_goods表中有一个字段status,status为1代表商品未被下单,status为2代表商品已经被下单,那么我们对某个商品下单时必须确保该商品s ...

  9. mybatis框架demo first

    SqlMapConfig.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE con ...

  10. iOS YSDropdownMagnify 下拉放大,向上导航显示

    要实现的效果如上.在实际开发中,我们会使用到三种方式来实现. 通过隐藏导航栏,自定义导航View 改变原生导航栏背景透明 原生导航栏通过添加背景图片改变 个人是比较喜欢第二种. github下载地址: ...