Android自定义加载动画
2016-12-16 10:37
459 查看
准备做一个Android自定义加载动画的合集,主要通过自定义View实现一些常见的加载动画,也会模仿一些主流APP好看的加载动画。项目源码同步上传到了个人github上,欢迎大家star,fork,提issues,一起交流进步。
目前实现了几种效果,以后会陆续加入其他效果:
通过动画可以实现一些绚丽的效果,平时我们在使用过程中,有几点需要咱注意一下:
1.OOM的问题:
这个问题主要出现在帧动画上,Frame(帧动画)是通过顺序播放一系列图像从而产生动画的效果,可以简单理解为图像切换动画。很明显,当图片数量过多并且图片过大的时候,就极容易出现OOM的现象。之前我在项目中就遇到过这种情况:
Android性能优化之Bitmap导致的内存溢出
所以在实际项目开发中应该尽量避免使用帧动画,对于那些配置低,内存小的手机很容易出现内存溢出的情况导致应用崩溃。
2.无限循环动画的问题:
这个问题主要出现在属性动画来实现无限循环,很常见的就是加载动画。如果当前Activity正在使用无限循环动画,退出当前Activity或者将当前Activity切入后台时,没有及时结束动画。可能会导致Activity无法释放从而导致内存泄漏。解决办法就是在自定义的加载动画中进行判断:
在退出当前Activity或者将当前Activity切入后台时,结束动画,这样及时释放Activity,防止内存溢出。
3.Handler的问题
Android动画中,尽量少用Handler来实现异步任务,因为使用Handler如果处理不当,很容易造成内存泄露。其实Android动画中已经封装好了处理异步任务的方法:
关于无限循环动画可以设置重复次数,然后添加动画监听,在动画重复时进行操作:
4.硬件加速
复杂的动画建议开启硬件加速,提高动画的流畅性。
目前实现了几种效果,以后会陆续加入其他效果:
通过动画可以实现一些绚丽的效果,平时我们在使用过程中,有几点需要咱注意一下:
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.硬件加速
复杂的动画建议开启硬件加速,提高动画的流畅性。
相关文章推荐
- Android自定义一个简单的动画加载页面
- android自定义加载数据动画dialog和简单的timer计时器
- android 自定义view 类似loadding从下往上加载的动画
- Android 帧动画实现自定义loading加载框
- Android 帧动画实现自定义loading加载框
- Android之使用帧动画实现自定义loading加载布局
- Android自定义加载loading view动画组件
- 【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式
- Android自定义View--加载动画
- Android自定义View实现loading动画加载效果
- Android为网络请求自定义加载动画
- Android自定义类似ProgressDialog效果加载动画
- Android 自定义SurfaceView实现加载GIF动画
- Android上拉刷新下拉加载XRefreshView集成以及自定义GIF动画
- Android之全屏转圈加载动画和自定义Toast
- Android 自定义View修炼-自定义加载进度动画XCLoadingImageView
- android自定义加载动画
- android:自定义绚丽的加载动画
- android控件使用---recycleview自定义上拉加载,和加载多个布局及加入动画
- android自定义View基础系列一(模仿365日历PC版加载动画)