美文网首页
逐帧动画使用说明

逐帧动画使用说明

作者: 取了个很好听的名字 | 来源:发表于2019-08-22 17:17 被阅读0次

前言

逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。

作用对象

视图View(Button,ImageView)

不能作用于View的属性,如长度,背景等

特点

使用简单
但图片过大或者过多会导致OOM

具体使用

1.XML方式

在res/drawable下新建attack.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/a1" android:duration="100"></item>
    <item android:drawable="@drawable/a2" android:duration="100"></item>
    <item android:drawable="@drawable/a3" android:duration="100"></item>
    <item android:drawable="@drawable/a4" android:duration="100"></item>
    <item android:drawable="@drawable/a5" android:duration="100"></item>
    <item android:drawable="@drawable/a6" android:duration="100"></item>
    <item android:drawable="@drawable/a7" android:duration="100"></item>
    <item android:drawable="@drawable/a8" android:duration="100"></item>
    <item android:drawable="@drawable/a9" android:duration="100"></item>
    <item android:drawable="@drawable/a10" android:duration="100"></item>
    <item android:drawable="@drawable/a12" android:duration="100"></item>
    <item android:drawable="@drawable/a14" android:duration="100"></item>
    <item android:drawable="@drawable/a15" android:duration="100"></item>
    <item android:drawable="@drawable/a16" android:duration="100"></item>
    <item android:drawable="@drawable/a17" android:duration="100"></item>
    <item android:drawable="@drawable/a18" android:duration="100"></item>
    <item android:drawable="@drawable/a19" android:duration="100"></item>
    <item android:drawable="@drawable/a20" android:duration="100"></item>
    <item android:drawable="@drawable/a21" android:duration="100"></item>
    <item android:drawable="@drawable/a22" android:duration="100"></item>
    <item android:drawable="@drawable/a23" android:duration="100"></item>
    <item android:drawable="@drawable/a24" android:duration="100"></item>
    <item android:drawable="@drawable/a25" android:duration="100"></item>
    </animation-list>

android:oneshot="false" 是否只执行一次
drawable="int":图片资源id
android:duration="long" 时长

MainActivity.java:

package com.zhqy.frameanimdemo;

import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Switch;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    ImageView iv;
    Button btn_start;
    Button btn_stop;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv=findViewById(R.id.iv);
        btn_start=findViewById(R.id.btn_start);
        btn_stop=findViewById(R.id.btn_stop);

        btn_start.setOnClickListener(this);
        btn_stop.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_start:
                //设置图片资源
                iv.setImageResource(R.drawable.attack);
                //获取动画对象
                AnimationDrawable start = (AnimationDrawable) iv.getDrawable();
                //开启
                start.start();
                break;
            case R.id.btn_stop:
                //获取动画对象
                AnimationDrawable stop = (AnimationDrawable) iv.getDrawable();
                //关闭动画
                stop.stop();
                break;
        }
    }
}

测试结果


帧动画.gif

2.代码方式

package com.zhqy.frameanimdemo;

import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Switch;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    ImageView iv;
    Button btn_start;
    Button btn_stop;
    AnimationDrawable animationDrawable;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv=findViewById(R.id.iv);
        btn_start=findViewById(R.id.btn_start);
        btn_stop=findViewById(R.id.btn_stop);
        btn_start.setOnClickListener(this);
        btn_stop.setOnClickListener(this);
 <-- 直接从drawable文件夹获取动画资源(图片) -->
        animationDrawable=new AnimationDrawable();
        for (int i=1;i<6;i++){
            int id = getResources().getIdentifier("b" + i, "drawable", getPackageName());
            Drawable drawable = getResources().getDrawable(id);
            animationDrawable.addFrame(drawable,100);
        }
        animationDrawable.setOneShot(false);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_start:
                //设置图片资源
                iv.setImageDrawable(animationDrawable);
                //关闭动画,防止第一次动画结束后停留在最后一张
                animationDrawable.stop();
                //开启动画
                animationDrawable.start();
                break;
            case R.id.btn_stop:
                //只播放一次
                animationDrawable.setOneShot(true);
                //设置图片资源
                iv.setImageDrawable(animationDrawable);
                //关闭动画
                animationDrawable.stop();
                break;
        }
    }
}

测试结果


帧动画.gif

以上就是逐帧动画的全部内容

相关文章

  • 逐帧动画使用说明

    前言 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就...

  • Android 动画总结

    Android 中的动画可以分为以下几类: 逐帧动画 补间动画 属性动画 一、逐帧动画 逐帧动画的原理就是让一系列...

  • 安卓动画

    Android 中的动画可以分为以下几类: 逐帧动画 补间动画 属性动画 1、逐帧动画 逐帧动画的原理就是让一系列...

  • Android动画

    文章脑图 1、Android动画种类 逐帧动画、补间动画、属性动画 逐帧动画 逐帧动画的原理就是让一系列的静态图片...

  • Android 动画

    Android中动画分为三种: 逐帧动画 补间动画 属性动画 逐帧动画 逐帧动画类似于gif或是电影的原理,通过将...

  • Android动画之逐帧动画FrameAnimation

    1 逐帧动画介绍 视图动画由两部分组成,补间动画和逐帧动画,前面文章已经讲解了补间动画,下面讲解逐帧动画。Fram...

  • Android 动画机制(一)

    逐帧动画(Frame Animation) 逐帧动画也叫Drawable Animation,是最简单最直...

  • Android 动画锦集

    Android 动画可分为逐帧动画、补间动画、属性动画。使用传统的逐帧动画、补间动画可以实现 Android 基本...

  • 三、Android 动画机制

    A、逐帧动画(Frame Animation) 逐帧动画也叫Drawable Animation,最直观最简单的动...

  • Android几种动画的总结(逐帧动画、补间动画)

    逐帧动画 逐帧动画也叫 Drawable Animation,是最简单最直观的动画效果。 在Android 中实现...

网友评论

      本文标题:逐帧动画使用说明

      本文链接:https://www.haomeiwen.com/subject/kjcosctx.html