`
mmdev
  • 浏览: 12954482 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android animation 动画背景图自动播放的实现

 
阅读更多

Android animation 动画背景图自动播放的实现

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)

分享到:
评论

相关推荐

    android实现图片闪烁动画效果的两种实现方式(实用性高)

    大家在使用APP的时候,有的APP在点击语音搜索界面后,会出现一个小话筒,小话筒会类似雷达似得在闪烁,表示正在倾听你说话的内容(这个大家可以参照微软的必应APP),那么问题来了,这种动画效果是如何实现的呢?...

    Android开发之背景动画简单实现方法

    本文实例讲述了Android开发之背景动画简单实现方法。分享给大家供大家参考,具体如下: 1、先创建动画层,有三张图片 &lt;?xml version=1.0 encoding=utf-8?&gt; &lt;animation xmlns:android=...

    Photo Motion v1.3 - 照片中的动画和背景中的运动android studio动态壁纸app java项目源码

    Photo Motion v1.3 - 照片中的动画和背景中的运动android studio动态壁纸app java项目源码 Photo Motion - Animation in Photos and Motion in backgrounds 动画创建器具有直观的箭头设置照片运动方向。带有令人惊叹...

    Android实现循环平移动画示例

    实现用一张背景图做循环从左往右平移动画。 1、实现两个animation xml文件,一个起始位置在-100%p ,一个在0%p。设置repeat属性为循环,重复。 代码如下: &lt;?xml version=”1.0″ encoding=”utf-8″?&gt; ...

    AndroidAnimation-Android自定义View之星球运动.zip

    Android自定义View 星球运动在dribbble闲逛的时候发现的一个有意思的星球运动的动画,刚好最近时间尚可,就简单实现了一下中间运动的部分,又是因为时间的原因,开头位移的部分没有完成. 这是在dribbble中发现的动画 ...

    Android自定义带动画的半圆环型进度效果

    import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android....

    安卓背景变灰放大动画(Animation) 效果

    安卓背景变灰放大动画(Animation) 效果,该项目实现了android背景变灰放大动画,通过点击某一个图片,该图片会变大,切屏幕的其他部分会变暗,再次点击其他地方图片会变小,希望该效果能够帮到大家的学习。

    DashboardAnimation:Android仪表板动画

    换个思路,我们让美工提供一张背景图和一张橙色指针图(这里要注意了,一定要提供多种分辨率的图片,为适配不同分辨率的手机),给橙色指针一个旋转动画不就可以了吗。 核心代码: /** * 旋转动画 * @param ...

    Android 4游戏编程入门经典

    第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开发教程.rar

    Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...

    【Android】自定义圆形进度条效果(有进度标识点)

    // TODO 自动生成的方法存根 super.onDraw(canvas); int width = this.getWidth(); int height = this.getHeight(); width = (width &gt; height) ? height : width; height = (width &gt; height) ? height : ...

    FABRevealLayout-浮动按钮与视图切换的动画效果.zip

    请注意次view背景必须是透明的,那样color animation才能正常工作。更多动画在过渡效果发生期间,如果你想让FABRevealLayout里面的元素也显示动画,或者需要其他的任何操作,你可以注册一个listener。private void...

    Android实现微博菜单弹出效果

    先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下。   说一下实现思路: 1、截取当前窗口,对图片做高斯模糊处理,将处理后的图片做popupwindow的背景图片; 2、创建popupwindow,...

    Android编程实现仿QQ发表说说,上传照片及弹出框效果【附demo源码下载】

    本文实例讲述了Android编程实现仿QQ发表说说,上传照片及弹出框效果。分享给大家供大家参考,具体如下: 代码很简单,主要就是几个动画而已,图标什么的就随便找了几个,效果图:   动画说明: 1.点击右上角按钮,菜单从...

    android游戏编程入门

    android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1  1.1 Android简介 1  1.2 版本分裂 3 ...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--动画Animation详解 |--动画之view左右抖动 |--动画之移动动画 |--动画之组合动画 |--动画之缩放动画ScaleAnimation |--反序列化对象 |--发送短信 读天气 调音量 |--回调函数的定义 |--图片之BitMap、Drawable、...

    FireZenk-s-ProgressBar-高度自定义的ProgressBar.zip

    有三个取值: INDETERMINATE :不确定模式,此时进度条将无限循环播放 ONESHOT:一次通过模式,此时进度条自动进行一次往返播放 DETERMINATE:确定模式,这中模式下你可以手动控制进度,每调用一次mBar.animation_...

    一款不错的魔法泡泡动画效果

    原来动画可以设置为背景图。  2.Line 32 exa1 = (AnimationDrawable)exv1.getBackground();  Line 60 exa1.start();  不仅仅Aniamtion有start()方法,原来AnimationDrawable作为一个Drawable的子类也可以有start...

    PanningView:一个用于水平和垂直平移图像的Android库

    PanningView提供了可以为背景可绘制动画的视图。 它提供了水平和垂直平移(您可以创建自定义动画)。 建立 Gradle依赖 compile ' com.anden.panningview:panning-view:1.0.2 ' 要么 Maven依赖 &lt; groupId&gt;...

Global site tag (gtag.js) - Google Analytics