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的实例工程

目录
相关文章
|
Shell API Android开发
android queries属性
android queries属性
908 2
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之视图
【数据库SQL server】关系数据库标准语言SQL之视图
298 0
Unknown encoder ‘libx264‘的解决方法
Unknown encoder ‘libx264‘的解决方法
1835 0
|
消息中间件 Java Nacos
深入了解Spring Cloud Alibaba:微服务架构的新选择
Spring Cloud Alibaba是一组为构建基于微服务架构的应用程序而设计的开源工具和框架。它融合了Spring Cloud和Alibaba的技术栈,提供了一种强大的方式来开发、部署和管理分布式应用。本文将深入介绍Spring Cloud Alibaba的核心概念和功能,帮助您更好地理解这个引人注目的技术栈。
|
存储 缓存 前端开发
关于Android SurfaceView截屏总结
关于Android SurfaceView截屏总结
1973 0
|
11月前
|
前端开发 Android开发 开发者
移动应用开发的未来:跨平台框架与原生开发的融合
【10月更文挑战第36天】本文探讨了移动应用开发领域内,跨平台框架与原生开发之间的相互作用及其未来发展趋势。通过分析Flutter和React Native等流行跨平台解决方案的优缺点,以及它们如何与传统iOS和Android开发相结合,本文揭示了一种新兴的开发模式,旨在提高开发效率并保持应用性能。
|
安全 物联网 网络安全
智能家居安全:从风险分析到防护措施的全面指南
随着物联网技术的飞速发展,智能家居系统已逐渐走入千家万户。然而,智能化带来的便捷背后隐藏着不容忽视的安全风险。本文深入探讨了智能家居系统中存在的各类安全威胁,并提出了一套综合性的安全防护措施。文章不仅涵盖了技术层面的解决方案,还强调了用户在提升家居安全中的关键作用。通过案例分析,本文旨在为读者提供一份实用的智能家居安全指南,确保技术便利与个人隐私的双重保障。
|
安全 Android开发 Kotlin
Android面试题之Kotlin协程并发问题和互斥锁
Kotlin的协程提供轻量级并发解决方案,如`kotlinx.coroutines`库。`Mutex`用于同步,确保单个协程访问共享资源。示例展示了`withLock()`、`lock()`、`unlock()`和`tryLock()`的用法,这些方法帮助在协程中实现线程安全,防止数据竞争。
258 1
|
存储 供应链 算法
深入理解Java中的ConcurrentSkipListMap:高效并发的有序映射
深入理解Java中的ConcurrentSkipListMap:高效并发的有序映射
|
机器学习/深度学习 边缘计算 安全
互联网安全的现状与防护策略
互联网安全问题已经成为了一个全球性的挑战,涉及到个人隐私、商业利益和国家安全。为了应对不断增加的威胁,我们需要采取多层次的安全策略,包括强化密码安全性、更新软件、多层次防御和数据加密。随着技术的不断发展,我们有望在未来看到更多创新的安全解决方案的出现,以应对不断变化的网络威胁。
890 1
互联网安全的现状与防护策略