人升更新介绍#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()
}
}
阅读更多