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

前言

之前的一篇文章:基于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, 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代码:

/** * 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, 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); // 设置为白色,即选中状态 } /** * 设置当前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, 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开发中有所参考,谢谢大家对脚本之家的支持。

时间: 2024-07-28 19:46:35

RxJava两步打造华丽的Android引导页的相关文章

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

前言 之前的一篇文章:基于RxJava实现酷炫启动页 中,我们尝试了用RxJava实现酷炫的启动页,今天我们在此基础上加入首次使用APP时的引导页功能. 效果如下图: 思路:思路其实很简单,就是在WelcomeActivity 中setContentView()之前判断是否是首次打开APP,若是,则去启动引导页(WelcomeGuideActivity)并return:若不是,则直接setContentView(),然后启动动画再启动MainActivity. 一.WelcomeActivity

美图看看两步打造婚礼唯美幻灯片效果教程

给各位美图看看软件的使用者们来详细的解析分享一下两步打造婚礼唯美幻灯片效果的教程. 教程分享: 一.开始播放幻灯片 首先,打开婚纱照片所在文件夹,通过右键菜单选择用美图看看来打开,就可直接进入软件的大图浏览窗口;然后,在其快捷操作栏上即可找到"播放幻灯"的操作按钮,单击即可开始幻灯片播放了,示意如图01所示:   图01 开始播放幻灯片 二.幻灯片播放效果调整 除了可以快速开始幻灯片的播放外,美图看看同时还带有非常简单又实用的幻灯片播放效果调整功能.软件默认会以全屏方式播放幻灯片,在播

PS简单两步打造梦幻的冷色荷花技巧

1.准备好素材以后,我们在photoshop将两张图片进行重叠.首先把两张图放入Photoshop中,将光斑图作为底图,复制荷花并将它放在光斑底图上作为图层一;将图层一的混合模式改为滤色,并调整透明度,在这里调整为了80%,使荷花主体比较清晰,并为花瓣制造了透明感. 2.完成合成之后还要对其进行调色,首先通过调整曲线提亮整体画面,同时增强亮部和暗部的反差,去除灰蒙蒙的画面质感; 其次,通过调整色彩平衡来改变照片的色温,降低色温,制造冷艳感,画面会显得更加梦幻; 最后,调节整体的亮度对比度,进行完

PS两步打造经典暗调中性色照片

教程介绍一种非常快捷的中性色图片调色方法.大致过程:先用色相饱和度降低图片的饱和度,然后载入图片的高光选区,创建纯色调整图层,颜色选择自己喜好的,再改变图层混合模式就可以得到所需的效果. 原图 <点小图查看大图> 1.整体降低点饱和度. 2.ctrl+Alt+~ 载入高光区,出现蚂蚁线以后,选择个纯色图层,颜色你自己喜欢就是你的颜色,然后混合模式改为柔光或者颜色,然后去看看效果. 当然你也可以换成别的图层混合模式,自己试试看;当然啦,还有别的当然的情况,比如说你当然也可以选择 ctrl+alt

Photoshop两步打造柔美的暖色花景人物照片

图片调色并不是过程越复杂越好,而是对颜色的把握.构思好想要的颜色后,可以用调色工具精确,快速调出想要的效果,高光及暗部可以根据需要渲染. 原图 最终效果 1.这张照片是以RAW格式拍摄的,在转换格式的时候,提高了色彩细节的饱和度,JPG调整的步骤如下: 创建可选颜色调整图层,对黄,绿进行调整,参数设置如下图.

Android启动引导页使用ViewPager实现_Android

我们在安装某个APP的时候,基本都会有一个引导页的提示,他们可以打广告,或者介绍新功能的加入和使用说明等. 一般都支持滑动并且下面有几个点,显示共有多少页和当前图片的位置,在IOS上这个实现起来比较简单,但在安卓上如何实现呢. 今天就和大家一起来学习用官方v4支持包下的ViewPager来实现这个效果. 先上图: 下面是我的实现,一个xml布局,一个GuideActivity和一个GuidePageAdapter.  先上XML.  <?xml version="1.0" enc

Android实现绕球心旋转的引导页效果_Android

现在很多APP都会出现Android实现绕球心旋转的引导页效果,一个类似小车一直在往前开的旋转式动画效果. 先看一下预览效果: 嗯,整体效果还算理想,基本实现了页面绕屏幕底部中心旋转. 这里我们用到了Android系统的一个组件ViewFlipper,该控件的主要作用是为其中的View切换提供动画效果,主要的方法如下: setInAnimation:设置View进入屏幕时的动画. setOutAnimation:设置View退出屏幕时的动画. showNext:调用该方法可以显示下一个View.

json-Android引导页在服务器接口取图片

问题描述 Android引导页在服务器接口取图片 做一个引导页引导页滑动的三张图片要再服务器接口里面取接口存放数据是json格式请问怎么取出这三张图片是其显示在我的引导页上面 解决方案 解析出图片并获取,依次适配到ViewPager上不就行了吗

app-Android 引导页!!!

问题描述 Android 引导页!!! 最近发现很多APP引导页是一段视频,这是怎么做的? flash ? 不可能是手写代码实现动画效果吧 解决方案 http://blog.csdn.net/hknock/article/details/12161159http://blog.csdn.net/nmsoftklb/article/details/12943483 解决方案二: 1.GIF 2.自定义动画 3.帧动画 解决方案三: 直接播放一段视频就行了. 也有可能是GIF 解决方案四: 应该是U