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开发中,动画(Animation)是提升用户体验的重要手段之一,尤其在用户界面设计中,动画效果能够增加应用的互动性和吸引力。本话题主要聚焦于"图片移动效果",这通常涉及到Android中的视图动画(View ...
大家在使用APP的时候,有的APP在点击语音搜索界面后,会出现一个小话筒,小话筒会类似雷达似得在闪烁,表示正在倾听你说话的内容(这个大家可以参照微软的必应APP),那么问题来了,这种动画效果是如何实现的呢?...
在Android中,我们可以使用`AnimationDrawable`类来实现Frame动画。 **实现方式:** 1. **XML方式**:通常在res/anim目录下创建一个xml文件,定义帧的顺序、持续时间和重复行为。例如,可以设置`<animation-list>`...
在Android开发中,帧动画(Frame Animation)是一种常见的动态效果实现方式,它通过连续播放一系列静态图片来模拟动画效果。然而,如果不进行优化,帧动画可能会导致内存消耗过大,影响应用性能,甚至引发ANR...
"android气泡动画实现"是指在Android应用中创建一种独特的视觉效果,即用户点击屏幕任意位置后,该位置会呈现出气泡爆炸的效果。这种动画通常用于吸引用户的注意力或者为交互提供反馈。下面我们将详细探讨如何在...
2. **Java代码实现**:可以创建AnimationDrawable对象,手动添加每一帧的图片资源,然后将它设置为视图的背景,并调用start()方法播放动画。 **使用技巧与注意事项** 1. 使用动画时,考虑到性能和电池消耗,避免...
`Android Animation Demo`是一个实例,它展示了如何在Android应用中实现各种动画效果。这篇详细讲解将围绕标题和描述中的知识点展开,包括Tween Animation(补间动画)和Frame Animation(帧动画),帮助开发者理解...
在Android中,实现帧动画主要包括以下步骤: 1. **准备图像资源**:将所有要播放的图片放入`res/drawable`目录。 2. **创建动画XML**:在`res/anim`目录下创建一个XML文件,如上面的例子所示,`<animation-list>`...
Frame动画是Android中用于创建序列动画的一种方法,类似于传统的电影制作,通过连续播放多帧静态图片来形成连续的视觉效果。与Tween动画不同,Tween动画是通过对对象属性(如平移、旋转、缩放等)进行平滑过渡来实现...
这篇博客《Android动画之一:Drawable Animation》深入探讨了如何利用Drawable资源创建动画,这是Android系统提供的基本动画类型之一。Drawable Animation主要适用于简单的帧动画,例如旋转、缩放或平移等效果。 在...
这个压缩包文件“安卓动画效果相关-Android技术实现使图像实现动画效果.rar”包含了若干个示例,可能涉及到Android平台上的不同类型的图像动画技术。虽然无法一一验证每个示例,但我们可以深入探讨Android中常见的...
在Android中,我们可以通过`ObjectAnimator`、`ValueAnimator`或`Animation`类来实现补间动画。例如,以下代码展示了如何使用`TranslateAnimation`来实现平移动画: ```java Animation translateAnim = new ...
这个压缩包文件包含了使用Android Studio实现背景图下拉放大以及各种动画效果(移动、旋转、渐变、伸缩)的源代码。下面将详细讲解这些动画效果的实现原理和关键知识点。 1. **背景图下拉放大**: 当用户下拉屏幕...
在Android开发中,实现背景图片缓慢移动的效果,通常涉及到图像动画这一重要概念。这不仅仅是为了增强用户界面的视觉吸引力,也是提升用户体验的关键因素之一。在本案例中,我们看到的标题"Android背景图片缓慢移动...
在Android中,`Drawable`不仅可以作为视图的背景,还可以实现简单的动画效果。比如,`LevelListDrawable`可以按照指定的级别显示不同的图像,从而实现简单的动画效果。此外,`RotateDrawable`、`AlphaDrawable`和`...
"Android 动画顺序播放源码.zip" 提供了一个示例项目,展示了如何在Android应用中实现动画的顺序播放。这个项目的重点在于理解和运用Android的动画系统,以便为用户提供流畅、连贯的视觉体验。 在Android中,动画...
"Android-利用动画实现背景逐渐变暗"这一主题,就是关于如何通过动画技术在弹出窗口(如PopupWindow)时,优雅地将背景逐渐变暗,从而突出显示前景窗口的一种实践。这种效果常见于各种应用中,如菜单弹出、对话框...
`Animation-list`是Android系统提供的一种用于实现逐帧动画的工具,特别适用于制作简单的2D游戏或动态图标等效果。本篇文章将详细探讨如何利用`Animation-list`来创建逐帧动画。 首先,`Animation-list`是XML布局...
在本文中,我们将深入探讨如何在Android应用中创建这种效果,主要关注`Animation`类、`Alpha`动画以及循环播放的实现。 1. **Animation与Alpha动画** - **Animation**: Android中的`Animation`类是所有动画的基础...