使用SplashScreen实现闪屏页

前言

水篇小文章

一般我们实现闪屏页是通过自定义主题的windowBackground,然后在主页恢复正常主题。

而在Android12上,谷歌对闪屏页支持了更多特性(如动画Drawable等)。

并因此在Jetpack中引入了新成员——SplashScreen。

使用该库可以非常简单的实现闪屏页,并完成大部分Android版本的兼容。

API 文档

SplashScreen | Android Developers )

其实文档里的描述非常清晰。

依赖

1
implementation "androidx.core:core-splashscreen:1.0.0-beta01"

简单使用

步骤1:定制 themes

改为继承 Theme.SplashScreen.*,一般Icon背景可以使用"Theme.SplashScreen.IconBackground"

1
2
3
4
5
 <style name="Theme.Calendar_manager" parent="Theme.SplashScreen.IconBackground">  
<item name="postSplashScreenTheme">@style/Theme.Material3.DayNight</item>
<item name="windowSplashScreenBackground">@android:color/background_light</item>
<item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_foreground</item>
</style>

步骤2:将 application 或者启动页 theme 改为该 theme

步骤3:启动页 onCreate 前调用 installSplashScreen()

1
2
installSplashScreen()  
super.onCreate(savedInstanceState)

进阶使用

延长展示时间

可以使用KeepOnScreenCondition api 进行设置:

1
2
3
SplashScreen.KeepOnScreenCondition {  
return@KeepOnScreenCondition SystemClock.elapsedRealtime() - App.appCreateTime <= 150
}

简单示例

Feature 1.1.0 material you by Ayagikei · Pull Request #5 · Ayagikei/calendar-account-manager (github.com)

人升三周年

时光荏苒,距离首次发布《人升》并在 V2EX 宣传已经过去了 3 年。

未曾想过当时在学校创建的小项目,能达到现在的小小高度。


想着,三周年做一些简单的回顾和展望。

匆忙编写,未作充分的准备,可能叙述的也比较水~


三周年之际,《人升》在各个市场的下载总和也大概超过了100W下载量(含有大量更新水分)。

今年7月份,也有幸自荐登上了Google Play英美各区首页的「近期更新」模块。

后续明年年初也跟 Google 可能会有另一个小合作(


也从最初的默默无闻,到陆陆续续从一些自媒体或者用户宣传中,看到《人升》的影子。

很是欣慰。


阅读更多

人升更新介绍#1.80.0 | 12月 开箱抽奖机制

请点击此处访问新站点

应用简介

人升是什么?

《人升》取义“让你的人生升级”是一款安卓平台的含有大量『游戏化』元素的待办事项(To-Do)和习惯养成类应用。《人升》既能满足对待办事项的常规功能要求外,还引入了「经验值等级系统」、「成就系统」和个性化的物品激励机制「金币、商品和仓库体系」。

大概就是一个简易版本的地球OL~完成你的待办事项,努力提升自己的各大属性等级。赚取金币,去购买自己设定好的物品奖励。

并且可以自设定各种复杂的成就,应用能够自动检测是否达到解锁目标。解锁条件能获取自己设置的奖励~

最新版本甚至支持了开箱功能,你可以在应用内使用完成任务获取的金币购买宝箱,获得自己设定的随机奖励。

除此之外还有感想、游戏化番茄钟、自定义成就、模块自定义隐藏等诸多功能待你探索~

我们也在课余、业余时间维护更新了这款独立应用两年多的时间。

一直维持着应用小体积(小于9MB)、通过绿色应用公约验证、无广告、无订阅制的特色。

不来试试吗~可以在各大手机应用市场和第三方应用商店搜索《人升》进行下载。

总览

  1. 开箱(随机奖励)
  2. 图标历史记录
  3. 对单个事项设置惩罚系数
  4. 比较小但有用的改进
阅读更多

人升更新介绍#1.79.0 | 11月/12月 成就解锁条件与计时统计

应用简介

人升是什么?

《人升》取义“让你的人生升级”是一款安卓平台的含有大量『游戏化』元素的待办事项(To-Do)和习惯养成类应用。《人升》既能满足对待办事项的常规功能要求外,还引入了「经验值等级系统」、「成就系统」和个性化的物品激励机制「金币、商品和仓库体系」。

大概就是一个简易版本的地球OL~完成你的待办事项,努力提升自己的各大属性等级。赚取金币,去购买自己设定好的物品奖励。

并且可以自设定各种复杂的成就,应用能够自动检测是否达到解锁目标。解锁条件能获取自己设置的奖励~

除此之外还有感想、游戏化番茄钟、自定义成就、模块自定义隐藏等诸多功能待你探索~

我们也在课余、业余时间维护更新了这款独立应用两年多的时间。

一直维持着应用小体积(小于9MB)、通过绿色应用公约验证、无广告、无订阅制的特色。

不来试试吗~可以在各大手机应用市场和第三方应用商店搜索《人升》进行下载。

总览

  1. 自设成就解锁条件
  2. 番茄计时统计
  3. 用户橱窗
  4. 自定义音效(会员专属)
  5. 比较小但有用的改进
  6. 预热:开箱系统
阅读更多

人升更新介绍#1.77.4 | 11/05 商品效果与橱窗

应用简介

人升是什么?

《人升》取义“让你的人生升级”是一款安卓平台的含有大量『游戏化』元素的待办事项(To-Do)和习惯养成类应用。《人升》既能满足对待办事项的常规功能要求外,还引入了「经验值等级系统」、「成就系统」和个性化的物品激励机制「金币、商品和仓库体系」。

大概就是一个简易版本的地球OL~完成你的待办事项,努力提升自己的各大属性等级。赚取金币,去购买自己设定好的物品奖励等等。

除此之外还有感想、游戏化番茄钟、自定义成就、模块自定义隐藏等诸多功能待你探索~

我们也在课余、业余时间维护更新了这款独立应用两年多的时间。

一直维持着应用小体积(小于8MB)、通过绿色应用公约验证、无广告、无订阅制的特色。

可以在各大手机应用市场搜索《人升》进行下载。

总览

  1. 商品使用效果
  2. 橱窗
  3. 内置图标
  4. 商品限购
  5. 事项统计
  6. 顶部清单切换
  7. 详细更新日志
阅读更多

人升-如何使用坚果云配置WebDAV备份

本文会讲解如何用坚果云做WebDAV备份。


WebDAV备份

备份功能现在新增了对 WebDAV 协议的支持。

只要填写好了 WebDAV 地址、账号和密码之后,就能使用云备份和恢复功能了。

因为一些原因,暂时还是只支持手动备份。

并且由于恢复功能比较危险,也有用户因此损失过数据,该版本还新增了「撤销上次恢复」的功能。

使用方法

获取 WebDAV 地址、账号、密码

理论上任意支持WebDAV协议的服务都可以使用。

国内可以使用坚果云:

  1. 首先打开坚果云官网,注册并且登录账号。

  2. 点击右上角用户名账号信息

  3. 切换至安全选项。

  4. 在右边第三方应用管理处,点击新增应用,输入名称(如:LifeUp)

  5. 然后点击生成密码,保存此处的服务器地址账号密码等信息,然后进入应用内进行配置。

应用配置

侧边栏设置数据备份/恢复/清除WebDAV 配置,填写地址、账号密码等信息,并且测试通过。

随之就能在备份恢复操作上选择 WebDAV 了。

Android DialogFragment 相关代码段

设置软键盘弹出,自动上移

1
2
3
4
5
6
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
...
// 设置有软键盘时,窗口自动上移
dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
...
}

设置全屏显示

1
2
3
4
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NORMAL, R.style.Dialog_FullScreen)
}
1
2
3
4
5
<style name="Dialog.FullScreen" parent="Theme.AppCompat.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsFloating">false</item>
</style>

子Fragment

1
2
3
4
5
private fun replace(fragment: androidx.fragment.app.Fragment) {
val transaction = childFragmentManager.beginTransaction()
transaction.replace(R.id.fragment, fragment)
transaction.commit()
}
阅读更多

Android动画相关代码段

ValueAnimator 实现TextView打字机效果

1
2
3
4
5
6
7
8
9
10
11
fun TextView.startTypeAnimation(duration: Long = 300) {
val originText = this.text
val valueAnimator = ValueAnimator.ofInt(0, originText.length)
valueAnimator.duration = duration
valueAnimator.interpolator = LinearInterpolator()
valueAnimator.addUpdateListener { animation ->
val length = animation.animatedValue as Int
this.text = originText.subSequence(0, length)
}
valueAnimator.start()
}

SpringInterpolator 简易的弹性插值器

1
2
3
4
5
6
7
8
/**
* 弹性插值器
*/
class SpringInterpolator(private val factor: Float) : Interpolator {
override fun getInterpolation(input: Float): Float {
return (2.0.pow((-10 * input).toDouble()) * sin((input - factor / 4) * (2 * Math.PI) / factor) + 1).toFloat()
}
}
阅读更多