返回
Android 自制 View:月有阴晴圆缺
Android
2024-01-12 06:01:09
中秋佳节将至,万家团圆。恰逢盛景,不妨与大家分享一份 Android 自定义 View —— 月有阴晴圆缺。
什么是月相?
众所周知,月亮本身并不会发光,而是反射太阳光。由于月球围绕地球公转,太阳、地球和月球三者的相对位置不断变化,导致我们在地球上观察到的月球亮区面积随之发生改变,这种现象便称为月相。
从新月到满月
整个月相周期中,月相由新月、娥眉月、上弦月、凸月、满月、亏凸月、下弦月、残月八种月相组成。
今天,我们仅探讨从新月到满月这一半的月相变化过程:
- 新月 :此时月球位于太阳和地球之间,背向地球,我们看不到月球。
- 峨眉月 :随着月球继续绕地球公转,我们开始看到月球的一小部分,形似弯弯的眉毛。
- 上弦月 :当月球运行到地球和太阳成直角时,我们看到月球的一半,呈半圆形。
- 凸月 :月球继续前进,亮区面积继续增大,呈现出超过半圆的弓形。
- 满月 :月球运行到太阳和地球的另一侧,此时我们看到月球的全部亮区,形成圆形。
LunarPhase 自定义 View
为了形象地展示月相变化,我们创建一个名为 LunarPhase 的自定义 View。
class LunarPhaseView : View {
private var phase = 0f // 月相,0~1
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val paint = Paint().apply {
color = Color.YELLOW
style = Paint.Style.FILL
}
val radius = minOf(width, height) / 2f
// 根据月相计算亮区角度
val angle = 360f * phase / 2f
canvas.drawArc(
RectF(0f, 0f, radius * 2, radius * 2),
-90f,
angle,
true,
paint
)
}
fun setPhase(phase: Float) {
this.phase = phase
invalidate() // 刷新视图
}
}
使用方法
LunarPhase 自定义 View 非常简单易用,只需设置月相值(0~1)即可。
lunarPhaseView.setPhase(0.5f) // 设置月相为半月
随着中秋佳节的临近,这款 LunarPhase 自定义 View 或许可以为你的应用增添一抹节日气息。希望大家能够通过本文,不仅学到 Android 自定义 View 的知识,更能感受中华传统文化的魅力。
最后,祝大家中秋节快乐,阖家团圆!