Android自定义加载动画(持续更新中...)

简介: 准备做一个Android自定义加载动画的合集,主要通过自定义View实现一些常见的加载动画,也会模仿一些主流APP好看的加载动画。项目源码同步上传到了个人github上,欢迎大家star,fork,提issues,一起交流进步。

准备做一个Android自定义加载动画的合集,主要通过自定义View实现一些常见的加载动画,也会模仿一些主流APP好看的加载动画。项目源码同步上传到了个人github上,欢迎大家star,fork,提issues,一起交流进步。

目前实现了几种效果,以后会陆续加入其他效果:

这里写图片描述

通过动画可以实现一些绚丽的效果,平时我们在使用过程中,有几点需要咱注意一下:

1.OOM的问题:
这个问题主要出现在帧动画上,Frame(帧动画)是通过顺序播放一系列图像从而产生动画的效果,可以简单理解为图像切换动画。很明显,当图片数量过多并且图片过大的时候,就极容易出现OOM的现象。之前我在项目中就遇到过这种情况:

Android性能优化之Bitmap导致的内存溢出

所以在实际项目开发中应该尽量避免使用帧动画,对于那些配置低,内存小的手机很容易出现内存溢出的情况导致应用崩溃。

2.无限循环动画的问题:

这个问题主要出现在属性动画来实现无限循环,很常见的就是加载动画。如果当前Activity正在使用无限循环动画,退出当前Activity或者将当前Activity切入后台时,没有及时结束动画。可能会导致Activity无法释放从而导致内存泄漏。解决办法就是在自定义的加载动画中进行判断:

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        if (!hasWindowFocus) {
            endAnimation();
        }
    }

    @Override
    protected void onWindowVisibilityChanged(int visibility) {
        super.onWindowVisibilityChanged(visibility);
        if (visibility != VISIBLE) {
            endAnimation();
        }
    }

在退出当前Activity或者将当前Activity切入后台时,结束动画,这样及时释放Activity,防止内存溢出。

3.Handler的问题

Android动画中,尽量少用Handler来实现异步任务,因为使用Handler如果处理不当,很容易造成内存泄露。其实Android动画中已经封装好了处理异步任务的方法:

public void postInvalidateDelayed(long delayMilliseconds) {}

关于无限循环动画可以设置重复次数,然后添加动画监听,在动画重复时进行操作:

       valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
       valueAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
            }

            @Override
            public void onAnimationEnd(Animator animation) {
            }

            @Override
            public void onAnimationCancel(Animator animation) {
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
               //处理动画循环业务
            }
        });

4.硬件加速
复杂的动画建议开启硬件加速,提高动画的流畅性。

目录
相关文章
|
20天前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
41 0
|
5天前
|
Java Android开发 开发者
Android10 修改开发者选项中动画缩放默认值
Android10 修改开发者选项中动画缩放默认值
10 0
|
6天前
|
XML Java Android开发
android的三种动画
android的三种动画
11 0
|
1天前
|
存储 消息中间件 缓存
Android应用开发:实现自定义View的高效绘制
【5月更文挑战第12天】 在Android开发中,创建高性能的自定义视图是一项挑战,它要求开发者深入理解Android的绘图机制以及UI渲染过程。本文将探讨如何优化自定义View的绘制流程,减少不必要的重绘和布局计算,以提升应用的响应速度和流畅度。我们将介绍几种关键策略,包括利用硬件加速、缓存绘制内容和使用高效的数据结构来存储视图状态。通过实例分析和性能对比,读者将学会如何在自己的应用中运用这些技巧,从而打造出更加流畅和响应迅速的用户界面。
|
3天前
|
XML Android开发 数据格式
Android下自定义Button样式
Android下自定义Button样式
10 3
|
3天前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
|
3天前
|
搜索推荐 Android开发
自定义Android标题栏TitleBar布局
自定义Android标题栏TitleBar布局
|
6天前
|
Java Android开发
Android 开机动画的启动
Android 开机动画的启动
12 0
|
20天前
|
Android开发 芯片
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
Android源代码定制:移除无用lunch|新建lunch|自定义customize.mk
26 3
|
20天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
42 1