Android之-----Frame帧动画
大家见到最多的就是Frame动画了,我们Android中当在也少不了它,它的使用更加简单,只需要创建一个对象来表示Frame动画,添加并启动 播放就OK了。Frame动画跟gif动画同出一辙,大家对gif也应该很熟悉了吧,gif格式本身就可以做成动画效果,我们只要轻轻松松来播放它就可以 实现动画效果了,我们先对gif图像进行解码,然后将每帧动画连续绘制播放出来就可以实现动画效果了。
下面来我们一起创建一个Frame帧动画,实现动画的图片:
1.拷贝到资源文件夹下面:
2.在drawable下面创建一个frame.xml文件,其中代码如下:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/girl_1" android:duration="200" /> <item android:drawable="@drawable/girl_2" android:duration="200" /> <item android:drawable="@drawable/girl_3" android:duration="200" /> <item android:drawable="@drawable/girl_4" android:duration="200" /> <item android:drawable="@drawable/girl_5" android:duration="200" /> <item android:drawable="@drawable/girl_6" android:duration="200" /> <item android:drawable="@drawable/girl_7" android:duration="200" /> <item android:drawable="@drawable/girl_8" android:duration="200" /> <item android:drawable="@drawable/girl_9" android:duration="200" /> <item android:drawable="@drawable/girl_10" android:duration="200" /> <item android:drawable="@drawable/girl_11" android:duration="200" /> </animation-list>以下对上面各个属性的说明:
android:oneshot 是指是否只播放一次
item 用于指定图片
android:drawable 指定特定的图片
android:duration 是指播放到该图片的时候要停留多长时间
animation-list 指定动画的图形
然后我们的activity_main.xml中定义代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/tvImage" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
然后我们的MainActivity.java中的代码如下
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tvImage=(TextView)findViewById(R.id.tvImage); //绑定帧动画 tvImage.setBackgroundResource(R.drawable.frame); //获得帧动画对象 final AnimationDrawable animationDraw=(AnimationDrawable) tvImage.getBackground(); /** * 以下几行代码比较重要,现在做详细的讲解 * getMainLooper():取到主线程中的消息处理对象 * myQueue():获得主线程所处理的消息队列 * addIdleHandler(hander):添加空闲的回调,即当主线程处理完消息队列中的事件之后才会调用hander对象中的回调方法。 * animationDraw.start():在MessageQueue.IdleHandler()内部类中条用该方法启动动画 */ //取得主线程的消息处理对象 getMainLooper().myQueue().addIdleHandler(new MessageQueue.IdleHandler() { @Override public boolean queueIdle() { //启动动画 animationDraw.start(); return false; } }); }
试想假若在取得帧动画对象后直接条用start()方法来启动动画,是否可以正常执行帧动画呢?
结果是不可以的,因为直接调用的话start()方法,帧动画对象并没有真正的完成绑定。
动画内部的绑定是通过时间完成的。因为在执行完
final AnimationDrawable animationDraw=(AnimationDrawable) tvImage.getBackground();
方法之后,其内部会发送一个事件给主线程的消息队列中,主线程有一个消息处理器来进行内部事件的处理。只有等待内部事件处理完成之后,调用start()方法才能起作用,从而启动动画
为了获知主线程的内部事件处理完成,进行了如下代码的处理:
getMainLooper().myQueue().addIdleHandler(new MessageQueue.IdleHandler() { @Override public boolean queueIdle() { //启动动画 animationDraw.start(); return false; } });
相关推荐
Drawable Animation / 帧动画 / Frame 动画 English explanation can go to read this article Ⅲ. Property Animation / 属性动画 English explanation can go to read this article Ⅳ. Ripple Effect / Touch ...
上次提供了Animation动画其一Tween补间动画的源代码,这次提供其二Frame动画的源代码(以直接编码的形式实现Frame动画的Demo,笔者资源中另有以xml形式实现的Demo)。
上次提供了Animation动画其一Tween补间动画的源代码,这次提供其二Frame动画的源代码(以xml形式实现的Demo。笔者资源中另有以直接编码的形式实现Frame动画的Demo)。
自己写的一个帧动画Demo,没啥技术含量,只是方便需要的人。
包含AlphaAnimation渐变效果 TranslateAnimation:位移渐变 ScaleAnimation:缩放渐变 RotateAnimation:旋转渐变 AnimationSet:组合渐变... frameAnimation:帧动画的xml和代码实现方式,非常适合新手朋友参考。
Android动画之Animation的使用。包括变换动画Tween Animation,帧动画Frame Animation,布局动画Layout Animation,属性动画Property Animation
基本动画案例:Tween Animation, Frame Animation,介绍参考:http://blog.csdn.net/forwardyzk/article/details/42739281
用TextureView或SurfaceView 高性能播放帧动画,避免在很多帧的情况下使用AnimationDrawable带来的OOM和卡顿问题。 华为 mate 20X 1920×1080 24bit color JPG 201frames 24fps 测试效果 download use Gradle ...
FAImageView is a Frame Animation ImageView for Android. You can set multiple frame images and start frame animation like UIImageView in iOS. You can animate multiple image like below! Setup Gradle ...
Android frame by frame animation动画显示源代码
在打开的 New Drableable Resource File中,File name中输入创建文件的名称(注意,名称格式必须是小写字母英文,这里以frame为例),在Root element中录入animation-list 点击ok即可。;操作完成后,该目录里面出现...
Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,...Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多。
在Android中,动画Animation的实现有两种方式:Tween Animation(补间动画)和Frame Animation(帧动画)。渐变动画是通过对场景里的对象不断做图像变换(平移、缩放、旋转等)产生动画效果。帧动画则是通过顺序播放...
一个动态表情的例子,快速了解帧动画的使用.
android 动画 资源,一步一步实现android FrameAnimation 动画,让你不再为动画烦恼。
5、如果一切正常,那么可以分别看到帧动画(frame-by-frame)、布局动画(layout animation)和视图动画(view animation) 目的:动画效果可以让用户的体验感非常好。在“演示Android中的文字和图片特效控件的使用”资源...
逐帧动画(Frame-by-frame Animations)顾名思义就是一帧接着一帧的播放图片,就像放电影一样。可以通过xml实现也可以通过java代码实现。逐帧动画适合实现比较简单的动画效果,如果要实现复杂动画不太建议使用逐帧...
NULL 博文链接:https://wangleyiang.iteye.com/blog/1714229
帧动画 Frame Animation Frame Animation Frame Animation
本文实例分析了Android动画之逐帧动画。分享给大家供大家参考,具体如下: 在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧...