欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动画的使用1——Drawable Animation

程序员文章站 2024-03-24 11:46:28
...

Drawable Animation可以称为帧动画,因为它是通过每次播放一帧Drawable资源实现的。

Drawable Animation算不上真正意义上的动画,因为它的内部实现是通过定时发送消息更新一个Drawable,
例如一个背景。所以使用这个动画的时候更像是使用一个背景资源,只不过更新背景的动作不用我们自己进行。
也许正是因为这个原因,android官方建议我们将这个动画资源放在drawable目录。
/**
* @description android中的逐帧动画.
* 逐帧动画的原理很简单,跟电影的播放一样,一张张类似的图片不停的切换,当切换速度达到一定值时,
* 我们的视觉就会出现残影,残影的出现保证了视觉上变化的连续性,这时候图片的切换看在我们眼中就跟真实的一样了。

  • 想使用逐帧动画:
  • 第一步:需要在res/drawable文件夹下新建一个xml文件,该文件详细定义了动画播放时所用的图片、切换每张图片
  • 所用的时间、是否为连续播放等等。(有些文章说,在res/anim文件夹下放置该文件,事实证明,会出错哦)
  • 第二步:在代码中,将该动画布局文件,赋值给特定的图片展示控件,如本例子中的ImageView。
  • 第三步:通过imageView.getBackGround()获取相应的AnimationDrawable对象,然后通过该对象的方法进行控制动画

  • */

使用帧动画非常之简单,只需要在drawable目录定义个xml文件,使用animation-list标签包裹所有组成这个动画的图片文件,设置播放速率。

然后在java代码中使用。
如图:
动画的使用1——Drawable Animation

<?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/a" android:duration="200"/>
    <item android:drawable="@drawable/b" android:duration="200"/>
    <item android:drawable="@drawable/c" android:duration="200"/>
    <item android:drawable="@drawable/d" android:duration="200"/>

</animation-list>

android:oneshot=”false”可以让动画循环播放
android:oneshot=”true”动画只能播放一次
里面的命名不规范自己改正一下
然后再layout写代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button 
        android:text="点击开始,长按终止"
        android:id="@+id/button"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <ImageView 
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        />
</LinearLayout>

这样就定义好了我们的动画资源,之后就是在activity中调用

package com.example.drawableanimation;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
    AnimationDrawable ad;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView imageview=(ImageView) findViewById(R.id.image); 
        ad = (AnimationDrawable) getResources().getDrawable(R.drawable.animation_list);
        //获得动画资源
        imageview.setBackgroundDrawable(ad);
       // imageview.setBackgroundResource(R.drawable.animation_list);
       // ad=(AnimationDrawable) imageview.getBackground();
       // ad.setAlpha(80); //设置图片透明度
        Button button=(Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {  //点击按钮

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                ad.start();
            }
        });
        button.setOnLongClickListener(new View.OnLongClickListener() { //长点击按钮

            @Override
            public boolean onLongClick(View arg0) {
                // TODO Auto-generated method stub
                ad.stop();
                return true;
                //return false;
            }
        });

    }

上面的代码就实现了简单的动画效果了
除此之外:在AnimationDrawable中,我们还可以看到如下的几个重要方法:
setOneShot(boolean flag) 和在配置文件中进行配置一样,可以设置动画是否播放一次,false为连续播放;
addFrame (Drawable frame, int duration) 动态的添加一个图片进入该动画中

相关标签: animation动画详解