Android利用ViewPager实现用户引导界面效果的方法
本文实例讲述了android利用viewpager实现用户引导界面效果。分享给大家供大家参考,具体如下:
我相信有很多朋友在装完软件首次打开时,有很多软件都有一个软件功能介绍,
例如刚装完微信打开它,有很多介绍微信功能的图片,并且在屏幕下方有很多小圆点提示你当前图片的位置。
今天我就来实现这么个功能
所实现的功能:
1.可以左右滑动功能图片。
2.图片的索引 看出当前图片所在的位置。
3.可循环滑动。
4.图片的索引带有动画效果。
本次学习主要是利用viewpager实现用户引导界面
在这里,我们需要用到google提到的一个支持包——android-support-v4.jar,这个包包含了一些非常有用的类,其中就是viewpager类来实现页面之间的切换操作,可以去官网下载这个包 使用谷歌提供的支持库(android)
关于android-support-v4.jar的详细信息,大家可以访问google官方网站:
下面是我的实现
guideactivity.java
/** * @author manymore13 */ public class guideactivity extends activity { // 到达最后一张 private static final int to_the_end = 0; // 离开最后一张 private static final int leave_from_end = 1; // 如果想直接应用到你的项目中,只需在这里添加删除图片id即可 private int[] ids = { r.drawable.guide_1, r.drawable.guide_3, r.drawable.guide_5, r.drawable.guide_6,r.drawable.guide_7 }; private list<view> guides = new arraylist<view>(); private viewpager pager; private imageview start; // 点击体验 private imageview curdot; private linearlayout dotcontain; // 存储点的容器 private int offset; // 位移量 private int curpos = 0; // 记录当前的位置 /** called when the activity is first created. */ @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() { this.getview(); initdot(); imageview iv = null; guides.clear(); for (int i = 0; i < ids.length; i++) { iv = buildimageview(ids[i]); guides.add(iv); } system.out.println("guild_size="+guides.size()); // 当curdot的所在的树形层次将要被绘出时此方法被调用 curdot.getviewtreeobserver().addonpredrawlistener( new onpredrawlistener() { public boolean onpredraw() { // 获取imageview的宽度也就是点图片的宽度 offset = curdot.getwidth(); return true; } }); final guidepageradapter adapter = new guidepageradapter(guides); // viewpager设置数据适配器,这个类似于使用listview时用的adapter pager.setadapter(adapter); pager.clearanimation(); // 为viewpager添加事件监听器 onpagechangelistener pager.setonpagechangelistener(new viewpager.simpleonpagechangelistener(){ @override public void onpageselected(int position) { int pos = position % ids.length; movecursorto(pos); if (pos == ids.length-1) {// 到最后一张了 handler.sendemptymessagedelayed(to_the_end, 500); } else if (curpos == ids.length - 1) { handler.sendemptymessagedelayed(leave_from_end, 100); } curpos = pos; super.onpageselected(position); } }); } /** * 在layout中实例化一些view */ private void getview() { dotcontain = (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); start.setonclicklistener(new onclicklistener() { public void onclick(view v) { // 点击体验 } }); } /** * 初始化点 imageview * @return 返回true说明初始化点成功,否则实例化失败 */ private boolean initdot() { if(ids.length > 0){ imageview dotview ; for(int i=0; i<ids.length; i++) { 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)); dotcontain.addview(dotview); } return true; }else{ return false; } } /** * 移动指针到相邻的位置 动画 * @param position * 指针的索引值 * */ private void movecursorto(int position) { animationset animationset = new animationset(true); translateanimation tanim = new translateanimation(offset*curpos, offset*position, 0, 0); animationset.addanimation(tanim); animationset.setduration(300); animationset.setfillafter(true); curdot.startanimation(animationset); } handler handler = new handler() { @override public void handlemessage(message msg) { if (msg.what == to_the_end) start.setvisibility(view.visible); else if (msg.what == leave_from_end) start.setvisibility(view.gone); } }; // viewpager 适配器 class guidepageradapter extends pageradapter{ private list<view> views; public guidepageradapter(list<view> views){ this.views=views; } @override public void destroyitem(view arg0, int arg1, object arg2) { ((viewpager) arg0).removeview(views.get(arg1 % views.size())); } @override public void finishupdate(view arg0) { } @override public int getcount() { // 注意这里一定要返回一个稍微大点值,不然滑到顶就滑不动了 return views.size()*20; } @override public object instantiateitem(view arg0, int arg1) { log.e("tag", "instantiateitem = "+arg1); ((viewpager) arg0).addview(views.get(arg1 % views.size()),0); return views.get(arg1 % views.size()); } @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) { } } }
下面是布局main.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相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android视图view技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
上一篇: Spring Cloud CLI简单介绍
推荐阅读
-
Android利用ViewPager实现用户引导界面效果的方法
-
很赞的引导界面效果Android控件ImageSwitcher实现
-
Android应用中使用ViewPager实现类似QQ的界面切换效果
-
Android应用中使用ViewPager实现类似QQ的界面切换效果
-
Android编程实现ViewPager多页面滑动切换及动画效果的方法
-
Android编程实现ViewPager多页面滑动切换及动画效果的方法
-
Android基于ViewPager+Fragment实现左右滑屏效果的方法
-
Android实现ViewPager多页面滑动切换及动画效果的方法
-
Android实现ViewPager多页面滑动切换及动画效果的方法
-
如何利用contains方法实现点击界面空白部分关闭当前面板的效果