Android动画背景自动播放
2016-02-20 17:20
531 查看
我们在开发android应用的时候,会遇到加载anim帧动画的图片,其中遇到最多的就是加载图片时候显示动态图,最常见的使用方法就是,设置背景为anim动画,如以下代码:
不过大多数朋友都会遇到的问题是,动画做好了,但是加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,那么如何解决呢?实际上,android的动画AnimationDrawable 组件里面有个start()方法用于启动动画播放,但是这个方法不能直接写在onClick,onStart,onResume里面,写进去也是无效的,无法启动动画,只能写在比如事件监听当中,于是我们可以使用点小技巧来实现自动播放
我从网上搜集的资料整理了以下三种方法:
方法一:使用Runnalbe()来加载
<?xml version="1.0" encoding="utf-8"?> <animation-list android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:duration="150" android:drawable="@mipmap/ic_loading0" /> <item android:duration="150" android:drawable="@mipmap/ic_loading1" /> <item android:duration="150" android:drawable="@mipmap/ic_loading2" /> <item android:duration="150" android:drawable="@mipmap/ic_loading3" /> <item android:duration="150" android:drawable="@mipmap/ic_loading4" /> <item android:duration="150" android:drawable="@mipmap/ic_loading5" /> </animation-list>
不过大多数朋友都会遇到的问题是,动画做好了,但是加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,那么如何解决呢?实际上,android的动画AnimationDrawable 组件里面有个start()方法用于启动动画播放,但是这个方法不能直接写在onClick,onStart,onResume里面,写进去也是无效的,无法启动动画,只能写在比如事件监听当中,于是我们可以使用点小技巧来实现自动播放
我从网上搜集的资料整理了以下三种方法:
方法一:使用Runnalbe()来加载
imageView.setBackgroundResource(R.anim.xxxxx); final AnimationDrawable animationDrawable =(AnimationDrawable)imageView.getBackground(); imageView.post(new Runnable() { @Override public void run() { animationDrawable.start(); } });方法二:使用AsyncTask异步加载启动
imageView.setBackgroundResource(R.anim.xxxxx); AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground(); RunAnim runAnim=new RunAnim(); runAnim.execute(""); class RunAnim extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... params) { if (!animationDrawable.isRunning()) { animationDrawable.stop(); animationDrawable.start(); } return ""; } }方法三:通过添加addOnPreDrawListener来自动加载
imageView.setBackgroundResource(R.anim.xxxxx); AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground(); imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener); OnPreDrawListener preDrawListener = new OnPreDrawListener(){ @Override public boolean onPreDraw() { animationDrawable.start(); return true; //必须要有这个true返回 } };
相关文章推荐
- Android DiskLruCache完全解析,硬盘缓存的最佳方案
- Android任务和返回栈完全解析,细数那些你所不知道的细节
- 系统广播 android.intent.action.KILL_BACKGROUND_SERVICE
- Android最佳性能实践(一)——合理管理内存
- Android最佳性能实践(二)——分析内存的使用情况
- Android横竖屏切换小结
- ANDROID_MARS学习笔记_S03_005_Geocoder、AsyncTask
- Android最佳性能实践(三)——高性能编码优化
- Android最佳性能实践(四)——布局优化技巧
- Android 中调试手段 打印函数调用栈信息
- android 开发技巧(2)--使用延迟加载以及避免代码重复
- Android开发笔记1
- android 中打 Log 的一些技巧
- Android属性动画完全解析(上),初识属性动画的基本用法
- android下拉刷新上拉加载的XListView的完美修改版,增加仿IOS的等待圈
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- Android漫游记(4)---.so文件动态调试一例
- Android IPC机制(五)用Socket实现跨进程聊天程序
- Android 多线程处理之多线程用法大集合
- Android IPC机制(五)用Socket实现跨进程聊天程序