前言
之前的一篇文章:基于RxJava实现酷炫启动页 中,我们尝试了用RxJava实现酷炫的启动页,今天我们在此基础上加入首次使用APP时的引导页功能。
效果如下图:
思路:思路其实很简单,就是在WelcomeActivity
中setContentVIEw()
之前判断是否是首次打开APP,若是,则去启动引导页(WelcomeGuIDeActivity)
并return;若不是,则直接setContentVIEw(),
然后启动动画再启动MainActivity
。
一、WelcomeActivity中判断是否是第一次启动
@OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 判断是否是第一次开启应用 boolean isFirstopen = SharedPreferencesUtil.getBoolean(this,SharedPreferencesUtil.FirsT_OPEN,true); // 如果是第一次启动,则先进入功能引导页 if (isFirstopen) { Intent intent = new Intent(this,WelcomeGuIDeActivity.class); startActivity(intent); finish(); return; } // 如果不是第一次启动app,则正常显示启动屏 setContentVIEw(R.layout.activity_welcome); ButterKnife.bind(this); startMainActivity(); }
我们判断是否是第一次打开APP是用了SharedPreferences
,我们这里对他进行了一下简单封装,代码如下:
/** * Created by xialo on 2016/7/25. */public class SharedPreferencesUtil { private static final String spfilename = "welcomePage"; public static final String FirsT_OPEN = "first_open"; public static Boolean getBoolean(Context context,String strKey,Boolean strDefault) {//strDefault boolean: Value to return if this preference does not exist. SharedPreferences setPreferences = context.getSharedPreferences( spfilename,Context.MODE_PRIVATE); Boolean result = setPreferences.getBoolean(strKey,strDefault); return result; } public static voID putBoolean(Context context,Boolean strData) { SharedPreferences activityPreferences = context.getSharedPreferences( spfilename,Context.MODE_PRIVATE); SharedPreferences.Editor editor = activityPreferences.edit(); editor.putBoolean(strKey,strData); editor.commit(); }}
二、WelcomeGuIDeActivity中,我们使用VIEwPager以加载多个引导页面使其可以左右滑动
不多说,请看WelcomeGuIDeActivity.java
代码:
/** * Created by xialo on 2016/7/25. */public class WelcomeGuIDeActivity extends Activity implements VIEw.OnClickListener { private VIEwPager vp; private GuIDeVIEwPagerAdapter adapter; private List<VIEw> vIEws; private button startBtn; // 引导页图片资源 private static final int[] pics = { R.layout.guIDe_vIEw1,R.layout.guIDe_vIEw2,R.layout.guIDe_vIEw3}; // 底部小点图片 private ImageVIEw[] dots; // 记录当前选中位置 private int currentIndex; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_guIDe); vIEws = new ArrayList<VIEw>(); // 初始化引导页视图列表 for (int i = 0; i < pics.length; i++) { VIEw vIEw = LayoutInflater.from(this).inflate(pics[i],null); if (i == pics.length - 1) { startBtn = (button) vIEw.findVIEwByID(R.ID.btn_enter); startBtn.setTag("enter"); startBtn.setonClickListener(this); } vIEws.add(vIEw); } vp = (VIEwPager) findVIEwByID(R.ID.vp_guIDe); adapter = new GuIDeVIEwPagerAdapter(vIEws); vp.setAdapter(adapter); vp.addOnPagechangelistener(new Pagechangelistener()); initDots(); } @OverrIDe protected voID onResume() { super.onResume(); } @OverrIDe protected voID onPause() { super.onPause(); // 如果切换到后台,就设置下次不进入功能引导页 SharedPreferencesUtil.putBoolean(WelcomeGuIDeActivity.this,false); finish(); } @OverrIDe protected voID onStop() { super.onStop(); } @OverrIDe protected voID onDestroy() { super.onDestroy(); } private voID initDots() { linearLayout ll = (linearLayout) findVIEwByID(R.ID.ll); dots = new ImageVIEw[pics.length]; // 循环取得小点图片 for (int i = 0; i < pics.length; i++) { // 得到一个linearLayout下面的每一个子元素 dots[i] = (ImageVIEw) ll.getChildAt(i); dots[i].setEnabled(false);// 都设为灰色 dots[i].setonClickListener(this); dots[i].setTag(i);// 设置位置tag,方便取出与当前位置对应 } currentIndex = 0; dots[currentIndex].setEnabled(true); // 设置为白色,即选中状态 } /** * 设置当前vIEw * * @param position */ private voID setCurVIEw(int position) { if (position < 0 || position >= pics.length) { return; } vp.setCurrentItem(position); } /** * 设置当前指示点 * * @param position */ private voID setCurDot(int position) { if (position < 0 || position > pics.length || currentIndex == position) { return; } dots[position].setEnabled(true); dots[currentIndex].setEnabled(false); currentIndex = position; } @OverrIDe public voID onClick(VIEw v) { if (v.getTag().equals("enter")) { enterMainActivity(); return; } int position = (Integer) v.getTag(); setCurVIEw(position); setCurDot(position); } private voID enterMainActivity() { Intent intent = new Intent(WelcomeGuIDeActivity.this,WelcomeActivity.class); startActivity(intent); SharedPreferencesUtil.putBoolean(WelcomeGuIDeActivity.this,false); finish(); } private class Pagechangelistener implements VIEwPager.OnPagechangelistener { @OverrIDe public voID onPageScrollStateChanged(int position) { } @OverrIDe public voID onPageScrolled(int position,float arg1,int arg2) { } @OverrIDe public voID onPageSelected(int position) { // 设置底部小点选中状态 setCurDot(position); } }}
我们用了三个页面guIDe_vIEw1、guIDe_vIEw2、guIDe_vIEw3作为引导页面,布局类似,只是guIDe_vIEw3多了个点击进入的button。
以下是guIDe_vIEw3.xml
<?xml version="1.0" enCoding="utf-8"?><FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" > <ImageVIEw androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:scaleType="centerCrop" androID:src="@mipmap/guIDe_img3" /> <button androID:ID="@+ID/btn_enter" androID:layout_wIDth="100dp" androID:layout_height="26dp" androID:layout_gravity="bottom|center_horizontal" androID:layout_marginBottom="75dp" androID:background="@drawable/button_shape" androID:text="@string/entry" androID:textcolor="@color/white" androID:textSize="18sp" androID:visibility="visible" /></FrameLayout>
WelcomeGuIDeActivity
中值得注意的是该button点击事件的处理,在点击button后我们并没有直接进入MainActivity
,而是先把SharedPreferences
中标记是否第一次进入的布尔值设为false,而后再次进入WelcomeActivity
,此时WelcomeActivity
会直接setContentVIEw()
然后启动动画,进入MainActivity
。
以上,我们华丽丽的引导页就完成了。希望本文中能对你的引导页提供帮助,和在大家学习AndroID开发中有所参考,谢谢大家对编程小技巧的支持。
总结以上是内存溢出为你收集整理的RxJava两步打造华丽的Android引导页全部内容,希望文章能够帮你解决RxJava两步打造华丽的Android引导页所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)