Android技术分享| 【自习室】自定义View代替通知动画(完)

在之前的文章中我们实现了自定义View需要的基本功能,本篇中我们通过 Timer 实现动画功能。我偷偷修改了一些数据结构,一会在下面贴出来。

最终效果图:
在这里插入图片描述

动画是通过 Timer 每17毫秒调用 View#post 来调用主线程更新一帧。定义一个 interpolator 使动画效果更自然(逐渐减速的效果)。

首先定义一个存储执行动画相关的数据结构:

private data class AnimInfo(
  val block: (percentage: Float) -> Unit,// 每帧调用
  val duration: Long = 510,
  val progress: Long = 0L,
  val done: () -> Unit = {}// 动画结束时调用
)

还有修改过的存储消息相关的数据结构:

data class Message(
  val avatar: String,// 头像
  val nickname: String,// 昵称
  val joinRoom: Int = 1,// 1=加入,其他为退出
  var shader: BitmapShader? = null,
  var bitmap: Bitmap? = null,
  var life: Long = 0L,// 当前时间
  val lifeTime: Long = 5000L, // 最大存在时间
)

使用链表来存储 Message 和 AnimInfo 数据:

private val animArr = LinkedList<AnimInfo>()
private val dataArr = LinkedList<Message>()

使用一个 Timer 计时动画及更新 Message 的已存在时间。在 init 方法中初始化:

init {
  paint.textSize = fontSize.toFloat()
  paint.style = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值