iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >RxJava两步打造华丽的Android引导页
  • 765
分享到

RxJava两步打造华丽的Android引导页

rxjavaAndroid 2022-06-06 07:06:54 765人浏览 八月长安
摘要

前言 之前的一篇文章:基于RxJava实现酷炫启动页 中,我们尝试了用RxJava实现酷炫的启动页,今天我们在此基础上加入首次使用APP时的引导页功能。 效果如下图: 思路:

前言

之前的一篇文章:基于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
,我们这里对他进行了一下简单封装,代码如下:



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, String strKey,
                 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
代码:



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, SharedPreferencesUtil.FIRST_OPEN, 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); // 设置为白色,即选中状态
  }
  
  private void setCurView(int position) {
    if (position < 0 || position >= pics.length) {
      return;
    }
    vp.setCurrentItem(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, SharedPreferencesUtil.FIRST_OPEN, 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开发中有所参考,谢谢大家对编程网的支持。

您可能感兴趣的文章:Android RxJava创建操作符IntervalAndroid中的Retrofit+OkHttp+RxJava缓存架构使用Android性能优化之利用Rxlifecycle解决RxJava内存泄漏详解RxJava入门指南及其在Android开发中的使用示例Android中通过RxJava进行响应式程序设计的入门指南Android上传多张图片的实例代码(RxJava异步分发)Android中用RxJava和ViewPager实现轮播图android使用RxJava实现预加载Android Retrofit和Rxjava的网络请求Android RxJava创建操作符Timer的方法


--结束END--

本文标题: RxJava两步打造华丽的Android引导页

本文链接: https://www.lsjlt.com/news/24520.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作