AnimationDrawable的使用(附带工程)

简介: 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~在Android中常用AnimationDrawable来实现简单的帧动画。

终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~

在Android中常用AnimationDrawable来实现简单的帧动画。可以通过两种方式来使用它,一种是xml方式,一种是代码方式。推荐使用xml方式。下面分别进行介绍。

一.使用xml方式实现AnimationDrawable

首先在res/drawable/目录下新建一个load_animation.xml文件,文件的根元素是animation-list,表示这是一个animation的列表,根元素下有几个属性,其中android:oneshot表示是否只执行一次,true表示只执行一次。根元素内的item表示帧动画的各个帧,用android:drawable来关联,其中android:duration表示该帧停留的时间。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <!--
    根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
    根标签下,通过item标签对动画中的每一个图片进行声明
    android:duration 表示展示所用的该图片的时间长度
 -->
    <item android:drawable="@drawable/loading_1" android:duration="100"/>
    <item android:drawable="@drawable/loading_2" android:duration="100"/>
    <item android:drawable="@drawable/loading_3" android:duration="100"/>
    <item android:drawable="@drawable/loading_4" android:duration="100"/>
</animation-list>
由于AnimationDrawable也是一个Drawable资源,可以通过xml中指定( android:background="@drawable/load_animation"),也可以在代码中设置:View. setBackgroundResource(resID).然后使用animation.start().开启,使用 animation.stop()停止。

其中对应的Activity代码为:

package com.scu.ad;

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 implements View.OnClickListener {

    private ImageView iv;
    private boolean flag;
    private Button bt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = (Button)findViewById(R.id.button1);bt.setOnClickListener(this);
        iv = (ImageView)findViewById(R.id.imageview);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button1:
                AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
                if (flag){
                    flag = false;
                    ad.stop();
                    bt.setText("开始");
                }else {
                    flag = true;
                    ad.start();
                    bt.setText("暂停");
                }
                break;
        }
    }
}
二.通过Java代码方式

package com.scu.ad;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class CodeActivity extends AppCompatActivity implements View.OnClickListener {

    private Button bt;
    private AnimationDrawable animationDrawable;
    private ImageView iv;
    private boolean flag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_code);
        bt = (Button)findViewById(R.id.button2);
        bt.setOnClickListener(this);
        animationDrawable = new AnimationDrawable();
        loadImages();
        animationDrawable.setOneShot(false);
        iv = (ImageView)findViewById(R.id.imageview1);
        iv.setBackground(animationDrawable);
    }

    private void loadImages() {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.loading_1);
        Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(),R.drawable.loading_2);
        Bitmap bitmap3 = BitmapFactory.decodeResource(getResources(),R.drawable.loading_3);
        Bitmap bitmap4 = BitmapFactory.decodeResource(getResources(),R.drawable.loading_4);
        animationDrawable.addFrame(new BitmapDrawable(bitmap),200);
        animationDrawable.addFrame(new BitmapDrawable(bitmap2),200);
        animationDrawable.addFrame(new BitmapDrawable(bitmap3),200);
        animationDrawable.addFrame(new BitmapDrawable(bitmap4),200);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button2:
                AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
                if (flag){
                    flag = false;
                    ad.stop();
                    bt.setText("开始");
                }else {
                    flag = true;
                    ad.start();
                    bt.setText("暂停");
                }
                break;
        }
    }
}


其中对应的工程地址是:AnimationDrawable的实例工程

目录
相关文章
|
4月前
|
Linux Android开发 开发者
快速打包、发布和管理应用——AppUploader 工具介绍
快速打包、发布和管理应用——AppUploader 工具介绍
|
iOS开发
完整版在xcode打测试专用ipa包流程
前言:有时候,想要把自己的程序运行在别人的iphone手机上,但又不能通过本地真机调试的方法安装,这个时候我们就要打一个测试专用的ipa包给远方的测试小伙伴们测试。
|
IDE 开发工具 C++
MDK5软件入门之——基础工程创建及下载和调试
MDK5软件入门之——基础工程创建及下载和调试
384 0
MDK5软件入门之——基础工程创建及下载和调试
西门子S7-200 SMART项目的编译、如何下载、运行调试、上传项目
上篇文章中我们学习了西门子S7-200 SMART如何切换编程编辑器、输入LAD程序以及如何编辑程序,本篇我们来介绍编程软件STEP7-Micro/WIN SMART中项目的编译、下载、运行调试和上传。
西门子S7-200 SMART项目的编译、如何下载、运行调试、上传项目
|
传感器 芯片
MicTR01 Tester 开发套件(工程监测仪器开发)使用说明
MicTR01 是专门为稳控科技的系列振弦模块 VM5/6/7和电子标签读写模块 TR01 开发测试、开发套件。使用 STC8 位 51 单片机为核心部件,演示上述各个型号模块的基本用法,包括了模块使用时的硬件连接和软件驱动的常规方法。也可以使用本套件的公开技术资料自行编写代码在套件上进行软硬件测试。
MicTR01 Tester 开发套件(工程监测仪器开发)使用说明
|
测试技术 Swift iOS开发
iOS开发 - 一个工程多环境切换,适合需要经常打很多不同环境包的人
iOS开发 - 一个工程多环境切换,适合需要经常打很多不同环境包的人
323 0
iOS开发 - 一个工程多环境切换,适合需要经常打很多不同环境包的人
|
Swift iOS开发
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
267 0
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
|
前端开发 JavaScript API
鸿蒙应用开发项目新建过程与hap包生成方法
今天主要和大家聊一聊,如何利用DevEco Studio创建工程项目,应用层的开发需要知道其中的配置方法。
798 0
鸿蒙应用开发项目新建过程与hap包生成方法
|
iOS开发
iOS项目环境基本搭建
iOS项目环境基本搭建
116 0
iOS项目环境基本搭建
|
开发工具 iOS开发 开发者
iOS应用程序发布步骤
iOS应用程序发布步骤
104 0
iOS应用程序发布步骤
下一篇
DDNS