文章目录

  • 启动页
    • 1. 启动页网络请求优化
    • 2. 启动页面网络请求优化的具体实践
    • 3. 启动页面无黑屏
    • 4.主题替换
    • 5. 启动页面屏蔽返回按键
  • 引导页
    • 1、延时启动检测
    • 2、圆点的绘制

启动页


一个很慢的启动页很容易让用户觉得受不了,进而“逃离” App 的,所以若想产品有更好的用户体验,做一些启动页的优化是一个不错的选择。这里我们简单介绍一下我在实践中对启动页是如何优化的。

1. 启动页网络请求优化

我们在启动页做了什么?

  • 加载 App 中 h5 页面的 url 地址;
  • 加载请求用户信息;
  • 加载首页地图页面需要展示的图标;
  • 延时三秒钟跳转首页面,这时候无论是否加载到前面的网络请求信息,都会跳转到首页面。

2. 启动页面网络请求优化的具体实践

timer = new Timer();timerTask = new TimerTask() {@Overridepublic void run() {if (isGoToComplete) {L.i("等待2s完成,取消timer任务...");cancelTimer();return;}if (isLoadStartQueryComplete && isLoadUserInfoComplete) {// 已经显示过引导图L.i("StartActivity中网络请求完成,执行跳转逻辑.....");handler.sendEmptyMessage(eventWhat);L.i("StartActivity中网络请求完成,取消timer任务...");cancelTimer();}}};timer.schedule(timerTask, 0, 100);

3. 启动页面无黑屏

使用透明主题:

<item name="android:windowIsTranslucent">true</item>

Activity.onCreate() 之前 App 不做显示,这样用户误以为是手机慢了,这种瞒天过海的方案大家还是不要用了。

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="android:windowIsTranslucent">true</item></style></resources>

4.主题替换

我们在style中自定义一个样式Lancher,在其中放一张背景图片,或是广告图片之类的。

 <style name="AppTheme.Launcher" parent="AppTheme">
<!--<item name="android:windowBackground">@color/startingwindow_bgcolor</item>--><item name="android:windowBackground">@drawable/bg</item></style>

把这个样式设置给启动的 Activity

         <activityandroid:name=".activity.SplashActivity"android:screenOrientation="portrait"android:theme="@style/AppTheme.Launcher">

然后在 Activity 的 onCreate 方法,把 Activity 设置回原来的主题

@Overrideprotected void onCreate(Bundle savedInstanceState) {//替换为原来的主题,在onCreate之前调用setTheme(R.style.AppTheme);super.onCreate(savedInstanceState);}

5. 启动页面屏蔽返回按键

一般的我们的 App 中都会在启动页面执行一些网络操作,初始化配置等,所以这时候我们是不希望用户通过按下返回按键退出 App ,因而我们需要在启动页中屏蔽返回按键,这里简单的介绍一下具体的实现:

/*** startActivity屏蔽物理返回按钮** @param keyCode* @param event* @return*/@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {return true;}return super.onKeyDown(keyCode, event);}

引导页

1、延时启动检测

用 sharedpreference 来检测:

     Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {boolean isFirst = PreferencesUtils.getBoolean(SplashActivity.this,"isFirst",false);if (!isFirst) {readyGo(GuideActivity.class);PreferencesUtils.putBoolean(SplashActivity.this, "isFirst",true);}else{readyGo(MainActivity.class);}}},2000);

2、圆点的绘制

我们完全可以用 shade 属性和 selector 属性帮我们绘制完成。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="@color/colorAccent"/><size android:height="10dp"android:width="10dp"/>
</shape>

用 selector 就可以改变不同的颜色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/point_select" android:state_selected="true"/><item android:drawable="@drawable/point_normal" android:state_selected="false"/>
</selector>

引导页界面布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#2233"tools:context=".GuideActivity"><androidx.viewpager.widget.ViewPagerandroid:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="match_parent"/><Buttonandroid:id="@+id/guide_start"android:layout_width="200dp"android:layout_height="50dp"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:background="@drawable/btn_background"android:text="开始体验"android:textColor="#ffffff"android:textSize="20sp"android:textStyle="bold"android:layout_marginBottom="20dp"android:visibility="gone"/><LinearLayoutandroid:id="@+id/point_ly"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="40dp"android:orientation="horizontal"/></RelativeLayout>

初始化圆点:

private void initPoint() {//获取layoutLinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);//设置每一个view即圆点的对左的偏移量params.setMargins(15,0,0,0);//根据图片多少来确定个数for (int i = 0; i < imgRes.length; i++) {ImageView imageView = new ImageView(this);imageView.setImageResource(R.drawable.dot_select);imageView.setLayoutParams(params); //把上面的控件属性设置到LinearLayout中if (i == 0){ //默认第一张为红色圆点imageView.setSelected(true);}else{imageView.setSelected(false);}//把圆点这个子视图导入我们的LinearLayout里面mLayout.addView(imageView);mImageViews.add(imageView);//跟着viewpager变换颜色}}

在页面滑动完成之后,改变圆点的颜色就可以了。

     //滑动时改变圆点的状态for (int i = 0; i < mImageViews.size(); i++) {if (i == position){mImageViews.get(i).setSelected(true);}else{mImageViews.get(i).setSelected(false);}}//当为最后一个时,显示button,并隐藏圆点if (position == mImageViews.size() -1){mLayout.setVisibility(View.GONE);mButton.setVisibility(View.VISIBLE);ObjectAnimator animator = ObjectAnimator.ofFloat(mButton,"alpha",0f,1f);animator.setDuration(1000);animator.start();}else{mLayout.setVisibility(View.VISIBLE);mButton.setVisibility(View.GONE);}

最后附上完整 Demo

Android 项目必备(二)--> 启动页 引导页相关推荐

  1. flutter(1) 启动页 引导页

    flutter 启动页 引导页 Android 原生引导页面的方法如下 1 自定义 使用 ViewPager控件 2使用第三方 组建AppIntro AppIntro快速启动页面 flutter  引 ...

  2. Android启动页,引导页适配华为手机(虚拟按键)显示问题

    前言 看到我这篇文章的同学肯定会质疑我开发的能力,我遇到的问题总是很奇怪,估计真的跟我的开发能力有关系~~~,最近公司的B端项目要上线了,UI妹子昨天给做了几张引导页与一张启动页,原来没有仔细观察过图 ...

  3. android ViewFlipper使用示例(注册引导页)

    其实ViewFlipper工作机制很简单,如上图,就是将添加到ViewFlipper中的子View按照顺序定时的显示是其中一个子View,其他的子View设置为Gone状态.ViewFlipper页面 ...

  4. Android ViewPager简单实现 - 倒计时、引导页左右滑动

    说明: ViewPager简单实现,方便以后用.做的是一个全屏的引导页. 截图: 代码: GuideActivity.java package com.xinyan.personal.ui.activ ...

  5. android compose利用pager写一个引导页

    本文来自bitCoder的视频翻译,原视频请观看哔哩哔哩上博主BitCoder的Jectpack Compose 引导页案例一 效果图: gradle配置: //pager库implementatio ...

  6. Android项目必备技术

    1.一个APP只需要一个Activity //片段fragmentimplementation 'me.yokeyword:fragmentation:1.3.6'implementation 'me ...

  7. Android 项目必备(三十七)-->使用友盟集成 QQ、微信、微博等第三方分享与登录

    文章目录 效果图 实战 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟. 效果图 实战 ...

  8. Android 项目必备(四十二)-->Android 多窗口模式

    简介 自由窗口模式: 该模式类似于常见的桌面操作系统, 应用界面的窗口可以自由的拖动和修改大小. 分屏模式 该模式可以在手机上使用, 该模式将屏幕一分为二, 同时显示两个应用界面. 画中画模式: 该模 ...

  9. Android 项目必备(二十六)-->获取手机中所有 APP

    效果图 代码 添加依赖 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30' implementation ...

  10. Android 项目必备(二十九)-->App 在线升级与更新

    文章目录 前言 实战 前言 1. 用户使用 App 的时候升级提醒有两种方式获得: 通过应用市场获取: 打开应用之后提醒用户更新升级. 2. 更新操作一般是在用户点击了升级按钮之后开始执行的,这里的升 ...

最新文章

  1. Cisco交换机密码恢复
  2. jenkins配置权限不对导致无法登陆或者空白页面解决办法
  3. CentOS系统双网卡路由设置
  4. 数字证书格式详细说明【转】
  5. 用触发器实现SQLite的外键约束
  6. ERP物理机迁移至阿里云实践
  7. 关于泰勒展开的两点思考
  8. 甲骨文重磅发布:客户现可将自治数据库部署在自己的数据中心
  9. Electron-日志与崩溃收集
  10. cmake编译gtest测试程序(三)
  11. 1分钟了解微信收款商业版
  12. 材料成型及控制工程学计算机吗,材料成型及控制工程 硕士以后 工资多少,
  13. Android升级WebView浏览器内核版本
  14. 那些年 用过的经典App
  15. Discuz 模板目录
  16. 要读的书---培根说:历史使人明智,诗词使人巧慧,算学使人精密,哲理使人深刻,伦理学人庄重,逻辑修辞使人善辩。...
  17. springboot微信点餐系统的设计与实现 毕业设计-附源码221541
  18. 在 cmd 中启动 Android 模拟器
  19. Vue3+ElementPlus 表格分页组件封装
  20. Google街景车在台湾香港出现

热门文章

  1. Oleg Shilo:基于CS-Script的Notepad++的插件_.Net技术
  2. dos皇帝攻略_dos游戏皇帝
  3. 阿里2019实习生面经
  4. android手机存储空间猛增,实测安卓升级到鸿蒙,可用内存增加半个G,存储空间增加6个G...
  5. 实验五 八段数码管显示(红绿灯)
  6. CTFHub技能树——备份文件下载
  7. 灭世之Apache Log4j2 远程代码执行漏洞
  8. 一代测序、二代测序以及三代测序的优缺点及应用对比?
  9. Mysql事务操作及存储引擎
  10. html挪车隐藏手机,警告,千万不能留挪车电话!!!教你两招,这样做就可以挪车,避免麻烦...