您好,欢迎访问一九零五行业门户网

ViewPager实现启动引导页面(个人认为很详细)_html/css_WEB-ITnose

效果如图:
启动页面是一张图片+延时效果,这里就不给出布局文件了。
welcomeactivity分析:在启动页面检测是否是第一次运行程序,如果是,则先跳转到引导界面的activityandyviewpageractivity;否,则直接跳转到mainactivity。
判断很简单,使用sharedpreferences。
welcomeactivity.java具体实现:
package com.example.qidong; import android.os.bundle; import android.os.handler; import android.app.activity; import android.content.context; import android.content.intent; import android.content.sharedpreferences; import android.content.sharedpreferences.editor; public class welcomeactivity extends activity { private final int splash_display_lenght = 3000; // 延迟3秒 private sharedpreferences preferences; private editor editor; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.welcome); preferences = getsharedpreferences(phone, context.mode_private); new handler().postdelayed(new runnable() { @override public void run() { if (preferences.getboolean(firststart, true)) { editor = preferences.edit(); // 将登录标志位设置为false,下次登录时不再显示引导页面 editor.putboolean(firststart, false); editor.commit(); intent intent = new intent(); intent.setclass(welcomeactivity.this, andyviewpageractivity.class); welcomeactivity.this.startactivity(intent); welcomeactivity.this.finish(); } else { intent intent = new intent(); intent.setclass(welcomeactivity.this, manactivity2.class); welcomeactivity.this.startactivity(intent); welcomeactivity.this.finish(); } } }, splash_display_lenght); } }
首先是引导页面布局:父布局是relaytivelayout;子布局是viewpager,且viewpager充满整个屏幕;导航点是4个imageview且相对父布局底部有一定高度;然后在导航点
上面有一个button,设置其属性android:visibility=gone(当控件visibility属性为invisible时,界面保留了view控件所占有的空间;而控件属性为gone时,则界面不保留view控件所占有的空间。)。
main.xml具体实现:

接下来,先定义一个类viewpageradapter继承pageradapter。pageradapter就是一个管理viewpager各个view的适配器。
viewpageradapter.java具体实现:
package com.example.qidong; import java.util.list; import android.os.parcelable; import android.support.v4.view.pageradapter; import android.support.v4.view.viewpager; import android.view.view; public class viewpageradapter extends pageradapter{ //界面列表 private list views; public viewpageradapter (list views){ this.views = views; } //删除界面 @override public void destroyitem(view arg0, int arg1, object arg2) { ((viewpager) arg0).removeview(views.get(arg1)); } @override public void finishupdate(view arg0) { // todo auto-generated method stub } //获得当前界面数量 @override public int getcount() { if (views != null) { return views.size(); } return 0; } //初始化arg1位置的界面 @override public object instantiateitem(view arg0, int arg1) { ((viewpager) arg0).addview(views.get(arg1), 0); return views.get(arg1); } //判断是否由对象生成界面 @override public boolean isviewfromobject(view arg0, object arg1) { return (arg0 == arg1); } @override public void restorestate(parcelable arg0, classloader arg1) { // todo auto-generated method stub } @override public parcelable savestate() { // todo auto-generated method stub return null; } @override public void startupdate(view arg0) { // todo auto-generated method stub } }
接下来是重头戏andyviewpageractivity.java。andyviewpageractivity继承了activity,实现了onpagechangelistener接口。当页面改变的时候,系统调用onpagechangelistener接口
的onpageselected()方法,复写该方法,在该方法里面要改变底部小圆点的选中状态,这包括改变界面滑动前的那个小圆点的状态为未选中,和改变当前界面的小圆点的状态为选中。所以设置一个
全局变量currentindex,用来记录滑动前的那个界面的位置(是个int值)。
andyviewpageractivity.java具体实现:
package com.example.qidong; import java.util.arraylist; import java.util.list; 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; import android.widget.linearlayout; public class andyviewpageractivity extends activity implements onpagechangelistener { private viewpager vp; private viewpageradapter vpadapter; private list views; private button button; // 引导图片资源 private static final int[] pics = { r.drawable.guide1, r.drawable.guide2, r.drawable.guide3, r.drawable.guide4 }; // 底部小店图片 private imageview[] dots; // 记录当前选中位置 private int currentindex; /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); initview(); views = new arraylist(); // 为引导图片提供布局参数 linearlayout.layoutparams mparams = new linearlayout.layoutparams( linearlayout.layoutparams.wrap_content, linearlayout.layoutparams.wrap_content); // 初始化引导图片列表 for (int i = 0; i < pics.length; i++) { imageview iv = new imageview(this); iv.setlayoutparams(mparams); iv.setimageresource(pics[i]); views.add(iv); } // 初始化adapter vpadapter = new viewpageradapter(views); vp.setadapter(vpadapter); // 绑定回调 vp.setonpagechangelistener(this); button.setonclicklistener(new onclicklistener() { @override public void onclick(view arg0) { intent intent = new intent(); intent.setclass(andyviewpageractivity.this, manactivity2.class); andyviewpageractivity.this.startactivity(intent); finish(); } }); } private void initview() { button = (button) findviewbyid(r.id.button); vp = (viewpager) findviewbyid(r.id.viewpager); // 初始化底部小圆点 initdots(); } private void initdots() { linearlayout ll = (linearlayout) findviewbyid(r.id.ll); dots = new imageview[pics.length]; // 循环取得小点图片 for (int i = 0; i < pics.length; i++) { //view android.view.viewgroup.getchildat(int index): //returns the view at the specified position in the group. dots[i] = (imageview) ll.getchildat(i); dots[i].setenabled(false);// 都设为灰色 dots[i].settag(i);// 设置位置tag,方便取出与当前位置对应 //view中的settag(onbect)表示给view添加一个格外的数据,以后可以用gettag()将这个数据取出来。 } currentindex = 0; dots[currentindex].setenabled(true);// 设置为红色,即选中状态 } /** * 改变当前引导小点颜色? */ private void setcurdot(int positon) { if (positon pics.length - 1 || currentindex == positon) { return; } system.out.println(positon=+positon); dots[positon].setenabled(true); //此时的currentindex指的是上一个圆点 system.out.println(currentindex=+currentindex); dots[currentindex].setenabled(false); //现在的currentindex指的是当前的小圆点 currentindex = positon; } // 当滑动状态改变时调用 @override public void onpagescrollstatechanged(int arg0) { // todo auto-generated method stub } // 当前页面被滑动时调用 @override public void onpagescrolled(int arg0, float arg1, int arg2) { // todo auto-generated method stub } // 当新的页面被选中时调用 @override public void onpageselected(int arg0) { // 设置底部小点选中状态 setcurdot(arg0); if (arg0 == 3) { button.setvisibility(view.visible); } else { button.setvisibility(view.gone); } } }
其它类似信息

推荐信息