Frame Animation 帧动画

本文介绍了一种帧动画实现方式——DrawableAnimation,并详细讲解了如何使用AnimationDrawable来创建帧动画。通过XML定义图像序列及其持续时间,使得帧动画的创建变得简单易维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Frame Animation (又叫Drawable Animation),类似于电影的播放,是一帧一帧的播放不同的图像序列!
AnimationDrawable 是帧动画的核心实现类!

相比较在代码中庸AnimationDrawable实现帧动画,用xml的方式更加方便且易于维护和修改!

  • res/drawable/路径下面定义xml文件。定义构成帧动画的不同图像的顺序和持续时间。 animation-list 作为xml的根元素,item表示每个帧的图像资源和持续时间

这里写图片描述

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true" >

    <item
        android:duration="300"
        android:drawable="@drawable/krystal01">
    </item>
    <item
        android:duration="300"
        android:drawable="@drawable/krystal02">
    </item>
    <item
        android:duration="300"
        android:drawable="@drawable/krystal03">
    </item>
    <item
        android:duration="300"
        android:drawable="@drawable/krystal04">
    </item>

</animation-list>
  • 在代码中为View设置并启动帧动画
package com.example.frameanimation;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.os.Build;

public class MainActivity extends Activity {
    private ImageView imageView;
    // 帧动画
    private AnimationDrawable animationDrawable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = (ImageView) findViewById(R.id.imageView1);

        // 将帧动画设置为imageView的背景,然后启动动画
        imageView.setBackgroundResource(R.drawable.rocket_thrust);

        animationDrawable = (AnimationDrawable) imageView.getBackground();

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // 帧动画的 start()方法,不能再onCreate()方法中执行,因为AnimationDrawable还没有连接到Window
            // 如果你想要立即执行动画,你可以在activity的 onWindowFocusChanged() 调用start()方法,当window获得焦点就会执行
            animationDrawable.start();
            return true;
        }
        return super.onTouchEvent(event);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}
  • 运行结果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值