Windows风格的Loading动画Android实现(3)

本文介绍了如何在Android中实现Windows风格的Loading动画,重点在于优化重绘过程,避免过度绘制,提高性能。通过让每个点独立计算和绘制其位置,以及调整运动轨迹,实现了平滑的动画效果。同时,通过控制更新绘制参数的时间间隔,确保16ms内只绘制一次,提升用户体验。
摘要由CSDN通过智能技术生成

前言

最近在学习开源弹幕引擎源码,其中对重绘的控制的很好,值得学习,我把一部分技术应用到我的这个动画里面。第一,在这个弹幕引擎里面,各个弹幕相互独立,独立计算独立绘制。第二,不过度绘制,这种情况是丢帧的反面。简单来说就是不要在16ms内绘制两次,因为当fps大于60之后,人眼就看不出差别来了。

效果图

此处输入图片的描述

改进

  1. 面向对象,让每个点自己计算显示位置,自己绘制
    每个点的运动轨迹是一样的,只是启动时间,启动位置不同,而这些可以通过时间偏移、位置偏移实现。独立之后逻辑变的简单。
  2. 参照系的问题
    所有的点都一直有一个平移速度
  3. 不再16ms内重绘两次
    计算两次更新绘制参数之间的时间间隔,如果小于16ms则让工作线程休眠,得到间隔到了16ms再更新绘制参数。
  4. 上篇博客中的uiHander没有必要,用postInvalidate()即可

Demo

Github

源码

public class LoadingView extends View {
   

    /**
     * The cy of every point is the same.
     */
    private float cy;

    /**
     * The radius of every point is the same.
     */
    private float radius;

    /**
     * Used in animation.
     */
    private long startMillis = -1;
    private long lastMills = -1;

    /**
     * Used to make translation more smooth
     */
    private Interpolator enterInterpolator, exitInterpolator;


    /**
     * The moving velocity of the point which is not entering or exiting
     */
    private float v;

    /**
     * The number of points
     */
    private int pointNum;

    private HandlerThread workerThread;
    private Handler workerHandler;



    private long enterDuration = 600;

    private long moveDuration 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值