Android基于ViewPager实现的应用欢迎界面完整实例
程序员文章站
2024-03-07 16:24:21
本文实例讲述了android基于viewpager实现的应用欢迎界面。分享给大家供大家参考,具体如下:
有时候开发一个应用需要指导用户提示一些新功能,这样的欢迎界面的实现...
本文实例讲述了android基于viewpager实现的应用欢迎界面。分享给大家供大家参考,具体如下:
有时候开发一个应用需要指导用户提示一些新功能,这样的欢迎界面的实现可以用一下方法
首先我们要用到viewpager这个类,这个类是在android-support-v4.jar中,网上搜一下就会有
现将这个包放到项目中,之后进行引用
viewpager类个人理解就是一个容器,将你需要的图片资源放到他的adapter中进行填充,这样我们就需要一个adapter,自定义一个adapter继承pageradapter,之后设置viewpager的setadapter()就可以了
接下来,理一下小圆点的实现思路,准备两张图片,一个是选中时的状态,一个是未选中的状态,然后利用selector设置它的变化
整个项目的思路就是这样,具体请参见下面的代码:
public class indexslide extends activity implements onclicklistener, onpagechangelistener { private viewpager vp; private viewpageradapter vpadapter; private list<view> views; // 引导图片资源 private static final int[] pics = { r.drawable.chun, r.drawable.xia, r.drawable.qiu, r.drawable.dong }; // 底部小点图片 private imageview[] dots; // 记录当前选中位置 private int currentindex; @override protected void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); setcontentview(r.layout.indexslide); views = new arraylist<view>(); 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); } vp = (viewpager) findviewbyid(r.id.page); // 初始化adapter vpadapter = new viewpageradapter(views); vp.setadapter(vpadapter); // 绑定回调 vp.setonpagechangelistener(this); // 初始化底部小点 initdots(); } private void initdots() { linearlayout ll = (linearlayout) findviewbyid(r.id.ll); dots = new imageview[pics.length]; // 循环取得小点图片 for (int i = 0; i < pics.length; i++) { dots[i] = (imageview) ll.getchildat(i); dots[i].setenabled(true);// 都设为灰色 dots[i].setonclicklistener(this); dots[i].settag(i);// 设置位置tag,方便取出与当前位置对应 } currentindex = 0; dots[currentindex].setenabled(false);// 设置为白色,即选中状态 } /** * 设置当前的引导页 */ private void setcurview(int position) { if (position < 0 || position >= pics.length) { return; } vp.setcurrentitem(position); } /** * 设置当前引导小点的选中 */ private void setcurdot(int positon) { if (positon < 0 || positon > pics.length - 1 || currentindex == positon) { return; } dots[positon].setenabled(false); dots[currentindex].setenabled(true); currentindex = positon; } // 当滑动状态改变时调用 public void onpagescrollstatechanged(int arg0) { // todo auto-generated method stub } // 当当前页面被滑动时调用 public void onpagescrolled(int arg0, float arg1, int arg2) { // todo auto-generated method stub } // 当新的页面被选中时调用 public void onpageselected(int arg0) { setcurdot(arg0); } public void onclick(view v) { int position = (integer) v.gettag(); setcurview(position); setcurdot(position); } class viewpageradapter extends pageradapter { // 界面列表 private list<view> views; public viewpageradapter(list<view> views) { this.views = views; } // 销毁arg1位置的界面 @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) { // todo auto-generated method stub 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 } } }
布局文件
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.viewpager android:id="@+id/page" android:layout_width="fill_parent" android:layout_height="fill_parent" > </android.support.v4.view.viewpager> <linearlayout android:id="@+id/ll" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginbottom="24.0dip" android:layout_alignparentbottom="true" android:layout_centerhorizontal="true"> <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="15.0dip" android:src="@drawable/dot" /> <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="15.0dip" android:src="@drawable/dot" /> <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="15.0dip" android:src="@drawable/dot" /> <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="15.0dip" android:src="@drawable/dot" /> </linearlayout> </relativelayout>
设置小圆点的selector
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_enabled="true" android:drawable="@drawable/off" /> <item android:state_enabled="false" android:drawable="@drawable/on" /> </selector>
更多关于android相关内容感兴趣的读者可查看本站专题:《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
上一篇: asp.net 源码保存 用程序分页