Android动画背景图自动播放的实现
我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。 例如:
<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="100" android:drawable="@drawable/loading_1" />
<item android:duration="100" android:drawable="@drawable/loading_2" />
<item android:duration="100" android:drawable="@drawable/loading_3" />
<item android:duration="100" android:drawable="@drawable/loading_4" />
<item android:duration="100" android:drawable="@drawable/loading_5" />
<item android:duration="100" android:drawable="@drawable/loading_6" />
<item android:duration="100" android:drawable="@drawable/loading_7" />
<item android:duration="100" android:drawable="@drawable/loading_8" />
<item android:duration="100" android:drawable="@drawable/loading_9" />
<item android:duration="100" android:drawable="@drawable/loading_10" />
<item android:duration="100" android:drawable="@drawable/loading_11" />
<item android:duration="100" android:drawable="@drawable/loading_12" />
</animation-list>
不过大多数朋友都会遇到的问题是,动画是做好了,但是界面在加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,这就失去了意义了,实际上,android的动画AnimationDrawable 组件里面有个start()方法用于启动动画播放,但是这个方法不能直接写在onClick,onStart,onResume里面,写进去也是无效的,无法启动动画,只能写在比如事件监听当中,于是我们可以使用点小技巧来实现自动播放
目前我知道的有三种方法:
ImageViewimageView=(ImageView)findViewById(R.id.xxx);
方法一:使用Runnalbe()来加载
imageView.setBackgroundResource(R.anim.xxxxx);
finalAnimationDrawableanimationDrawable=(AnimationDrawable)imageView.getBackground();
imageView.post(newRunnable(){
@Override
publicvoidrun(){
animationDrawable.start();
}
});
注意:此处一定要用getBackground();不能用getdrawable()方法,会没效果。原因如下:
由于我们使用的是imageView的setBackgroundResource方法设置的资源背景,相当于布局文件中的android:background属性,这个属性是view类的属性,必须通过getBackground()方法来获取;而getdrawable()是imageview类的方法,必须通过在代码中setImageResource(int)(对应布局文件的android:src)或setImageDrawable(Drawable
drawable)方法设置才可以使用getdrawable()方法。
(详情参考帖子:http://www.eoeandroid.com/forum. ... 1&extra=#pid1627412)
方法二:使用AsyncTask异步加载启动
imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawableanimationDrawable=(AnimationDrawable)imageView.getBackground();
RunAnimrunAnim=newRunAnim();
runAnim.execute("");
classRunAnimextendsAsyncTask<String,String,String>{
@Override
protectedStringdoInBackground(String...params){
if(!animationDrawable.isRunning()){
animationDrawable.stop();
animationDrawable.start();
}
return"";
}
}
方法三:通过添加addOnPreDrawListener来自动加载 (我是用这个,感觉很好用)
imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawableanimationDrawable=(AnimationDrawable)imageView.getBackground();
//注意这里,如果你的图片控件用的是setImageResource
,你这里应该使用getDrawable();
imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);
OnPreDrawListenerpreDrawListener=newOnPreDrawListener(){
@Override
publicbooleanonPreDraw(){
animationDrawable.start();
returntrue;//必须要有这个true返回
}
};
以上三种方法经过测试没有问题,另外网上有一些说使用重写Activity的onWindowFocusChanged()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。
(http://www.toplee.com/blog/1345.html)
分享到:
相关推荐
大家在使用APP的时候,有的APP在点击语音搜索界面后,会出现一个小话筒,小话筒会类似雷达似得在闪烁,表示正在倾听你说话的内容(这个大家可以参照微软的必应APP),那么问题来了,这种动画效果是如何实现的呢?...
本文实例讲述了Android开发之背景动画简单实现方法。分享给大家供大家参考,具体如下: 1、先创建动画层,有三张图片 <?xml version=1.0 encoding=utf-8?> <animation xmlns:android=...
Photo Motion v1.3 - 照片中的动画和背景中的运动android studio动态壁纸app java项目源码 Photo Motion - Animation in Photos and Motion in backgrounds 动画创建器具有直观的箭头设置照片运动方向。带有令人惊叹...
实现用一张背景图做循环从左往右平移动画。 1、实现两个animation xml文件,一个起始位置在-100%p ,一个在0%p。设置repeat属性为循环,重复。 代码如下: <?xml version=”1.0″ encoding=”utf-8″?> ...
Android自定义View 星球运动在dribbble闲逛的时候发现的一个有意思的星球运动的动画,刚好最近时间尚可,就简单实现了一下中间运动的部分,又是因为时间的原因,开头位移的部分没有完成. 这是在dribbble中发现的动画 ...
import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android....
安卓背景变灰放大动画(Animation) 效果,该项目实现了android背景变灰放大动画,通过点击某一个图片,该图片会变大,切屏幕的其他部分会变暗,再次点击其他地方图片会变小,希望该效果能够帮到大家的学习。
换个思路,我们让美工提供一张背景图和一张橙色指针图(这里要注意了,一定要提供多种分辨率的图片,为适配不同分辨率的手机),给橙色指针一个旋转动画不就可以了吗。 核心代码: /** * 旋转动画 * @param ...
第1章 android,后起之秀 1.1 android简介 1.2 版本分裂 1.3 谷歌的角色 1.3.1 android开源项目 1.3.2 android market 1.3.3 挑战赛、设备播种计划和谷歌i/o 1.4 android的功能和体系结构 1.4.1 ...
Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...
// TODO 自动生成的方法存根 super.onDraw(canvas); int width = this.getWidth(); int height = this.getHeight(); width = (width > height) ? height : width; height = (width > height) ? height : ...
请注意次view背景必须是透明的,那样color animation才能正常工作。更多动画在过渡效果发生期间,如果你想让FABRevealLayout里面的元素也显示动画,或者需要其他的任何操作,你可以注册一个listener。private void...
先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下。 说一下实现思路: 1、截取当前窗口,对图片做高斯模糊处理,将处理后的图片做popupwindow的背景图片; 2、创建popupwindow,...
本文实例讲述了Android编程实现仿QQ发表说说,上传照片及弹出框效果。分享给大家供大家参考,具体如下: 代码很简单,主要就是几个动画而已,图标什么的就随便找了几个,效果图: 动画说明: 1.点击右上角按钮,菜单从...
android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1 1.1 Android简介 1 1.2 版本分裂 3 ...
|--动画Animation详解 |--动画之view左右抖动 |--动画之移动动画 |--动画之组合动画 |--动画之缩放动画ScaleAnimation |--反序列化对象 |--发送短信 读天气 调音量 |--回调函数的定义 |--图片之BitMap、Drawable、...
有三个取值: INDETERMINATE :不确定模式,此时进度条将无限循环播放 ONESHOT:一次通过模式,此时进度条自动进行一次往返播放 DETERMINATE:确定模式,这中模式下你可以手动控制进度,每调用一次mBar.animation_...
原来动画可以设置为背景图。 2.Line 32 exa1 = (AnimationDrawable)exv1.getBackground(); Line 60 exa1.start(); 不仅仅Aniamtion有start()方法,原来AnimationDrawable作为一个Drawable的子类也可以有start...
PanningView提供了可以为背景可绘制动画的视图。 它提供了水平和垂直平移(您可以创建自定义动画)。 建立 Gradle依赖 compile ' com.anden.panningview:panning-view:1.0.2 ' 要么 Maven依赖 < groupId>...