vivo安装App时的界面,有8个点在转动,心血来潮也想自己写一个,vivo其他app也有这个loading效果,反编译后发现是使用一张图片,然后不断旋转每个圆点的平均角度来达到圆点切换的感觉。
原理分析
获取到控件宽高后,计算出半径,使用三角函数,计算出每个角度的坐标,画点,再通过Handler发送延迟消息来重绘,重绘时旋转画布,同样旋转每个点的平均角度,来达到圆点切换效果。 以及还有对点大小进行缩放的功能,可以让样式切换为华为商店的样式,大家看下面的动图就知道了。 普通模式缩放模式
完整代码
自定义属性
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="RotateDotView"> <attr name="rdv_start_color" format="color|reference" /> <attr name="rdv_end_color" format="color|reference" /> <attr name="rdv_dot_count" format="integer|dimension" /> <attr name="rdv_dot_radius" format="integer|float|dimension" /> <attr name="rdv_auto_start" format="boolean" /> <attr name="rdv_rotate_angle" format="integer|dimension" /> <attr name="rdv_dot_mode" format="enum"> <enum name="normal" value="1" /> <enum name="scale" value="2" /> attr> declare-styleable>resources>
Java代码
public class RotateDotView extends View implements Runnable {
/** * 普通模式 */ private st