`
come_for_dream
  • 浏览: 116613 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Android之-----Frame帧动画(Animation)

 
阅读更多

                  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;
			}
		});

 

  • 大小: 13.3 KB
分享到:
评论

相关推荐

    Android代码-Android-Animation-Set

    Drawable Animation / 帧动画 / Frame 动画 English explanation can go to read this article Ⅲ. Property Animation / 属性动画 English explanation can go to read this article Ⅳ. Ripple Effect / Touch ...

    Android Animation Frame逐帧动画2

    上次提供了Animation动画其一Tween补间动画的源代码,这次提供其二Frame动画的源代码(以直接编码的形式实现Frame动画的Demo,笔者资源中另有以xml形式实现的Demo)。

    Android Animation Frame逐帧动画

    上次提供了Animation动画其一Tween补间动画的源代码,这次提供其二Frame动画的源代码(以xml形式实现的Demo。笔者资源中另有以直接编码的形式实现Frame动画的Demo)。

    Frame Animation 帧动画Demo

    自己写的一个帧动画Demo,没啥技术含量,只是方便需要的人。

    android 补间动画(Tween Animation)和Frame Animation(帧动画)简单使用

    包含AlphaAnimation渐变效果 TranslateAnimation:位移渐变 ScaleAnimation:缩放渐变 RotateAnimation:旋转渐变 AnimationSet:组合渐变... frameAnimation:帧动画的xml和代码实现方式,非常适合新手朋友参考。

    Android动画之Animation

    Android动画之Animation的使用。包括变换动画Tween Animation,帧动画Frame Animation,布局动画Layout Animation,属性动画Property Animation

    Frame Animation

    基本动画案例:Tween Animation, Frame Animation,介绍参考:http://blog.csdn.net/forwardyzk/article/details/42739281

    FrameAnimation:适用于Android的高性能帧动画库

    用TextureView或SurfaceView 高性能播放帧动画,避免在很多帧的情况下使用AnimationDrawable带来的OOM和卡顿问题。 华为 mate 20X 1920×1080 24bit color JPG 201frames 24fps 测试效果 download use Gradle ...

    Android代码-直接播放帧动画的ImageView

    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动画显示

    Android frame by frame animation动画显示源代码

    Android程序技术:动画逐帧动画.pptx

    在打开的 New Drableable Resource File中,File name中输入创建文件的名称(注意,名称格式必须是小写字母英文,这里以frame为例),在Root element中录入animation-list 点击ok即可。;操作完成后,该目录里面出现...

    Android学习之笔记---Animation的使用

    Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,...Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多。

    Android动画之逐帧动画(Frame Animation)基础学习

    在Android中,动画Animation的实现有两种方式:Tween Animation(补间动画)和Frame Animation(帧动画)。渐变动画是通过对场景里的对象不断做图像变换(平移、缩放、旋转等)产生动画效果。帧动画则是通过顺序播放...

    安卓帧动画FrameAnimation例子

    一个动态表情的例子,快速了解帧动画的使用.

    逐帧动画 资源

    android 动画 资源,一步一步实现android FrameAnimation 动画,让你不再为动画烦恼。

    Android的三种动画图形编程

    5、如果一切正常,那么可以分别看到帧动画(frame-by-frame)、布局动画(layout animation)和视图动画(view animation) 目的:动画效果可以让用户的体验感非常好。在“演示Android中的文字和图片特效控件的使用”资源...

    Android逐帧动画实现代码

    逐帧动画(Frame-by-frame Animations)顾名思义就是一帧接着一帧的播放图片,就像放电影一样。可以通过xml实现也可以通过java代码实现。逐帧动画适合实现比较简单的动画效果,如果要实现复杂动画不太建议使用逐帧...

    Android 帧(frame)动画

    NULL 博文链接:https://wangleyiang.iteye.com/blog/1714229

    android 帧动画

    帧动画 Frame Animation Frame Animation Frame Animation

    Android动画之逐帧动画(Frame Animation)实例详解

    本文实例分析了Android动画之逐帧动画。分享给大家供大家参考,具体如下: 在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧...

Global site tag (gtag.js) - Google Analytics