本文实例为大家分享了android实现启动引导图的具体代码,供大家参考,具体内容如下
下面是安卓启动引导图的实现,话不多说,直接上代码。
1.布局文件:activity_guide.xml
<?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/guide_vp" android:layout_width="match_parent" android:layout_height="match_parent" /> <linearlayout android:id="@+id/ll_guide_point" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_marginbottom="40dp" android:gravity="center_horizontal" android:orientation="horizontal" /> <imagebutton android:id="@+id/guide_ib_start" android:layout_width="wrap_content" android:layout_height="60dp" android:layout_alignparentbottom="true" android:layout_centerhorizontal="true" android:layout_gravity="center_vertical" android:layout_marginbottom="120dp" android:src="@mipmap/img_guide_start" android:visibility="gone" /> </relativelayout>
2.关于的viewpager的适配器guidepageadapter.java
/** * created by gdk on 2019/7/22 14:55 * describe:安装apk第一次启动的引导页 * * @author gdk */ public class guidepageadapter extends pageradapter { //存放图片的集合 private list<view> viewlist; public guidepageadapter(list<view> viewlist) { this.viewlist = viewlist; } /** * @return 返回页面的个数 */ @override public int getcount() { if (viewlist != null) { return viewlist.size(); } return 0; } /** * 判断对象是否生成界面 * * @param view * @param object * @return */ @override public boolean isviewfromobject(view view, object object) { return view == object; } /** * 初始化position位置的界面 * * @param container * @param position * @return */ @override public object instantiateitem(viewgroup container, int position) { container.addview(viewlist.get(position)); return viewlist.get(position); } @override public void destroyitem(viewgroup container, int position, object object) { container.removeview(viewlist.get(position)); } }
3.引导页的activity,guideactivity.java
/** * 第一次安装的引导页 * created by gdk on 2019-07-22 * * @author gdk */ public class guideactivity extends baseactivity<logincontract.presenter> implements logincontract.view, viewpager.onpagechangelistener { @bindview(r.id.guide_ib_start) imagebutton guideibstart; @bindview(r.id.guide_vp) viewpager guidevp; @bindview(r.id.ll_guide_point) linearlayout llguidepoint; private int[] imagepositionarray;//图片资源的数组 private list<view> viewlist;//图片资源的集合 //实例化原点view private imageview iv_point; private imageview[] ivpointarray; @override public int getlayoutid() { return r.layout.activity_guide; } @override public logincontract.presenter initpresenter() { return new loginpresenter(this); } @override public void initview() { //加载滑动的viewpager initviewpager(); //加载底部圆点 initpoint(); } @onclick({r.id.ll_guide_point, r.id.guide_ib_start}) public void onviewclicked(view view) { switch (view.getid()) { case r.id.guide_ib_start: //从启动页跳转到引导页,修改保存的值,再次进入时跳过此页面。 spuitlsinfo.putstring(guideactivity.this, "version", "1"); startactivity(new intent(guideactivity.this, mainactivity.class)); break; default: break; } } /** * 加载底部圆点 */ private void initpoint() { //这里实例化linearlayout llguidepoint = findviewbyid(r.id.ll_guide_point); //根据viewpager的item数量实例化数组 ivpointarray = new imageview[viewlist.size()]; //循环新建底部圆点imageview,将生成的imageview保存到数组中 int size = viewlist.size(); for (int i = 0; i < size; i++) { iv_point = new imageview(this); linearlayout.layoutparams lp = new linearlayout.layoutparams(linearlayout.layoutparams.wrap_content, linearlayout.layoutparams.wrap_content); //设置小圆点的间距 lp.setmargins(20, 0, 20, 0); iv_point.setlayoutparams(lp); ivpointarray[i] = iv_point; //第一个页面需要设置为选中状态,这里采用两张不同的图片 if (i == 0) { iv_point.setbackgroundresource(r.drawable.guide_dot_select); } else { iv_point.setbackgroundresource(r.drawable.guide_dot_unselect); } //将数组中的imageview加入到viewgroup llguidepoint.addview(ivpointarray[i]); } } /** * 加载图片viewpager */ private void initviewpager() { //实例化图片资源 imagepositionarray = new int[]{r.mipmap.img_guide_one, r.mipmap.img_guide_two, r.mipmap.img_guide_three, r.mipmap.img_guide_four}; viewlist = new arraylist<>(); //获取一个layout参数,设置为全屏 linearlayout.layoutparams params = new linearlayout.layoutparams( linearlayout.layoutparams.match_parent, linearlayout.layoutparams.match_parent); //循环创建view并加入到集合中 int len = imagepositionarray.length; for (int i = 0; i < len; i++) { //new imageview并设置全屏和图片资源 imageview imageview = new imageview(this); imageview.setlayoutparams(params); imageview.setbackgroundresource(imagepositionarray[i]); //将imageview加入到集合中 viewlist.add(imageview); } //view集合初始化好后,设置adapter guidevp.setadapter(new guidepageadapter(viewlist)); //设置滑动监听 guidevp.setonpagechangelistener(this); } @override public void onresult(object result, string message) { } @override public void onerror(throwable throwable, string message) { } @override public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) { } /** * 滑动后的监听 * * @param position */ @override public void onpageselected(int position) { //循环设置当前页的标记图 int length = imagepositionarray.length; for (int i = 0; i < length; i++) { ivpointarray[position].setbackgroundresource(r.drawable.guide_dot_select); if (position != i) { ivpointarray[i].setbackgroundresource(r.drawable.guide_dot_unselect); } } //判断是否是最后一页,若是则显示按钮 if (position == imagepositionarray.length - 1) { guideibstart.setvisibility(view.visible); } else { guideibstart.setvisibility(view.gone); } } @override public void onpagescrollstatechanged(int state) { } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); butterknife.bind(this); } }
涉及到两个布局文件
guide_dot_select.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@color/white"></solid> <corners android:radius="3dp" /> <size android:width="8dp" android:height="8dp" /> </shape>
guide_dot_unselect.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@color/colorprimarydark"></solid> <corners android:radius="3dp" /> <size android:width="8dp" android:height="8dp" /> </shape>
4.总结,代码中的注释比较详细,各位博友都能看懂,没有效果图,里面涉及的图片请使用简单的替代就行。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。