Use Drawable::level to animate dynamic clock icons
This commit is contained in:
parent
a78ef7f4bd
commit
dc23ef1f32
@ -416,22 +416,21 @@ private fun ClockLayer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val second = remember {
|
val second = remember {
|
||||||
Animatable((time.second - defaultSecond).toFloat())
|
Animatable((time.second).toFloat() + (time.nano / 1000000f) / 1000f)
|
||||||
}
|
}
|
||||||
|
|
||||||
val minute = remember {
|
val minute = remember {
|
||||||
Animatable((time.minute - defaultMinute).toFloat() + time.second.toFloat() / 60f)
|
Animatable((time.minute).toFloat() + time.second.toFloat() / 60f)
|
||||||
}
|
}
|
||||||
|
|
||||||
val hour = remember {
|
val hour = remember {
|
||||||
Animatable((time.hour - defaultHour).toFloat() + time.minute.toFloat() / 60f)
|
Animatable((time.hour).toFloat() + time.minute.toFloat() / 60f)
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(time) {
|
LaunchedEffect(time) {
|
||||||
val h = (time.hour - defaultHour).toFloat() + (time.minute - defaultSecond).toFloat() / 60f
|
val h = (time.hour).toFloat() + (time.minute).toFloat() / 60f
|
||||||
val m =
|
val m = (time.minute.toFloat() + (time.second).toFloat() / 60f)
|
||||||
(time.minute - defaultMinute).toFloat() + (time.second - defaultSecond).toFloat() / 60f
|
val s = (time.second).toFloat() + (time.nano / 1000000f) / 1000f
|
||||||
val s = (time.second - defaultSecond).toFloat() + (time.nano / 1000000f) / 1000f
|
|
||||||
second.snapTo(s)
|
second.snapTo(s)
|
||||||
hour.snapTo(h)
|
hour.snapTo(h)
|
||||||
minute.snapTo(m)
|
minute.snapTo(m)
|
||||||
@ -454,23 +453,15 @@ private fun ClockLayer(
|
|||||||
this.scale(scale)
|
this.scale(scale)
|
||||||
}) {
|
}) {
|
||||||
for (sublayer in sublayers) {
|
for (sublayer in sublayers) {
|
||||||
withTransform({
|
|
||||||
when (sublayer.role) {
|
when (sublayer.role) {
|
||||||
ClockSublayerRole.Hour -> {
|
ClockSublayerRole.Hour -> {
|
||||||
rotate(hour.value / 12f * 360f)
|
sublayer.drawable.level = (((hour.value.toInt() - defaultHour + 12) % 12) * 60
|
||||||
|
+ ((minute.value.toInt() - defaultMinute + 60) % 60))
|
||||||
}
|
}
|
||||||
|
ClockSublayerRole.Minute -> sublayer.drawable.level = ((minute.value.toInt() - defaultMinute + 60) % 60)
|
||||||
ClockSublayerRole.Minute -> {
|
ClockSublayerRole.Second -> sublayer.drawable.level = (((second.value.toInt() - defaultSecond + 60) % 60) * 10)
|
||||||
rotate(minute.value / 60f * 360f)
|
else -> {}
|
||||||
}
|
}
|
||||||
|
|
||||||
ClockSublayerRole.Second -> {
|
|
||||||
rotate(second.value / 60f * 360f)
|
|
||||||
}
|
|
||||||
|
|
||||||
ClockSublayerRole.Static -> {}
|
|
||||||
}
|
|
||||||
}) {
|
|
||||||
drawIntoCanvas {
|
drawIntoCanvas {
|
||||||
sublayer.drawable.bounds = this.size.toRect().toAndroidRect()
|
sublayer.drawable.bounds = this.size.toRect().toAndroidRect()
|
||||||
sublayer.drawable.drawWithColorFilter(it.nativeCanvas, colorFilter)
|
sublayer.drawable.drawWithColorFilter(it.nativeCanvas, colorFilter)
|
||||||
@ -479,7 +470,6 @@ private fun ClockLayer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
class BitmapShaderBrush(
|
class BitmapShaderBrush(
|
||||||
val bitmap: Bitmap,
|
val bitmap: Bitmap,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user