前言

目录

目录

1. 作用对象

视图控件(View)

如Android的TextView、Button等等

不可作用于View组件的属性,如:颜色、背景、长度等等

2. 原理

将动画拆分为 帧 的形式,且定义每一帧 = 每一张图片

逐帧动画的本质:按序播放一组预先定义好的图片

3. 具体使用

步骤1:将动画资源(即每张图片资源)放到 drawable文件夹里

技巧:

找到自己需要的gif动画

用 gif分解软件(如 GifSplitter)将 gif 分解成一张张图片即可

效果图

步骤2:设置 & 启动 动画

设置 & 启动 逐帧动画有两种方式:在XML / Java代码。

方式1:XML实现

步骤1:在 res/anim的文件夹里创建动画效果.xml文件

此处路径为res/anim/knight_attack.xml

步骤2:设置动画资源(图片资源)

knight_attack.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="true" // 设置是否只播放一次,默认为false

>

// item = 动画图片资源;duration = 设置一帧持续时间(ms)

步骤3:在Java代码中载入 & 启动动画

public class FrameActivity extends AppCompatActivity {

private Button btn_startFrame,btn_stopFrame;

private ImageView iv;

private AnimationDrawable animationDrawable;

iv = (ImageView) findViewById(R.id.iv);

btn_startFrame = (Button) findViewById(R.id.btn_startFrame);

btn_stopFrame = (Button) findViewById(R.id.btn_stopFrame);

btn_startFrame.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

iv.setImageResource(R.drawable.knight_attack);

// 1. 设置动画

animationDrawable = (AnimationDrawable) iv.getDrawable();

// 2. 获取动画对象

animationDrawable.start();

// 3. 启动动画

}

});

//停止动画

btn_stopFrame.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

iv.setImageResource(R.drawable.knight_attack);

// 1. 设置动画

animationDrawable = (AnimationDrawable) iv.getDrawable();

// 2. 获取动画对象

animationDrawable.stop();

// 3. 暂停动画

}

});

}

}

方式2:在Java代码中实现

animationDrawable = new AnimationDrawable();

for (int i = 0; i <= 25; i++) {

int id = getResources().getIdentifier("a" + i, "drawable", getPackageName());

Drawable drawable = getResources().getDrawable(id);

animationDrawable.addFrame(drawable, 100);

}

btn_startFrame.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

animationDrawable.setOneShot(true);

iv.setImageDrawable(animationDrawable);

// 获取资源对象

animationDrawable.stop();

// 特别注意:在动画start()之前要先stop(),不然在第一次动画之后会停在最后一帧,这样动画就只会触发一次

animationDrawable.start();

// 启动动画

}

});

btn_stopFrame.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

animationDrawable.setOneShot(true);

iv.setImageDrawable(animationDrawable);

animationDrawable.stop();

}

});

效果图

效果图

4. 特点

优点:使用简单、方便

缺点:容易引起 OOM,因为会使用大量 & 尺寸较大的图片资源

尽量避免使用尺寸较大的图片

5. 应用场景

较为复杂的个性化动画效果。

使用时一定要避免使用尺寸较大的图片,否则会引起OOM

6. 总结

接下来,我我将继续对Android 动画进行分析,感兴趣的同学可以继续关注本人运营的Wechat Public Account:

请点赞!因为你们的赞同/鼓励是我写作的最大动力!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度。

andoid逐帧动画oom_Android 逐帧动画:关于 逐帧动画 的使用都在这里了!相关推荐

  1. 初中计算机学的动画,初中信息技术《制作简单逐帧动画》教案

    一.教学目标 1.能说出帧和关键帧的含义,能独立使用Flash制作逐帧动画. 2.通过合作探究的方法,学会制作逐帧动画,提升动手操作及协作的能力. 3.通过制作逐帧动画,加深对Flash软件的认识,体 ...

  2. 计算机动画制作第一节教案,付雪_ 第四章动画制作_第一节制作逐帧动画——教案设计(7页)-原创力文档...

    信息技术课堂教学设计 教学内容 第四章 第一节 制作"逐帧"动画 学 校 北京市高井中学 授课教师 付 雪 课 型 新授课 课 时 1 日 期 教学 目标 = 1 \* GB1 ⒈ ...

  3. android动画之帧动画(drawable animation)和补间动画(view animation)

    帧动画 drawable animation使用比较简单,而且支持市场上所以API版本,下面简单贴下代码.帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果. 直接代码贴上 x ...

  4. Android 帧动画,加载动画,AnimationDrawable,仿京东加载动画

    1.创建drawable文件ring_animation.xml <?xml version="1.0" encoding="utf-8"?> &l ...

  5. 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展Cocos2d源码的CCAnimation简化动画创建!...

    原文链接: http://www.himigame.com/iphone-cocos2d/525.html  本篇的知识点如下:        1. 两种方式实现自定义精灵:        2.两种方 ...

  6. 用maya API删除动画曲线多余的关键帧——掐头去尾删帧

    写这个东西的缘由是一个同事给我说了一个他以前碰到的一个问题:一个文件里有上万条动画曲线,要删除某一帧前面的帧,也要删掉某一帧后面的帧,相当于是掐头去尾,但从功能上来说这个mel完全可以胜任,但是执行起 ...

  7. Android动画总结系列(2)——补间动画使用

    一.综述 补间动画(Tween Animation.View Animation)是Android的基本动画之一,其与帧动画的本质完全不同.帧动画的原理是逐帧播放Drawable形成动画效果,补间动画 ...

  8. 定格动画运用的计算机技术是,计算机软件在定格动画制作中的应用

    龚静 摘要:隨着计算机信息技术与3D打印技术等先进技术的快速发展,传统定格动画制作受到了较大的冲击影响,如何通过技术改革与创新推动其行业发展成为有关领域研究和关注的重点.本文在对定格动画及其发展现状分 ...

  9. html动画用css还是js,javascript与css3动画结合使用小结

    当Html5,css3已渐渐成为主流的时候,我还非常习惯的用js去做一些简单的动画.因为在桌面浏览器上, 并非所有的都支持css3.用户也倒是很奇怪,用户习惯并不是每个用户都可以被培养.总有不少人会觉 ...

最新文章

  1. mysql两条完全相同的数据_两条完全相同的数据怎么用sql语句删除一条
  2. vue仿微博评论回复_Vue之 3.0升级
  3. 《解析几何》吕林根,徐子道第四版 习题 1.4.7,1.4.8,1.4.9
  4. Python学习之路9☞面向对象的程序设计
  5. kibana的query string syntax 笔记
  6. nanopc t3开发板系统烧录_基础教程18 定制 Arduino 系统
  7. Burst(突发)信号
  8. PIBOT移植ROS2记录(2)-添加Node与cmd_vel
  9. 华为防火墙笔记-出口选路
  10. 32层3D NAND速度直逼内存,长江存储是在画饼吗?
  11. android touch事件无反应,触摸屏 无响应
  12. DXP中关于PCB及原理绘制那些高级玩意总结
  13. Iterator 怎么使用?有什么特点?
  14. 计算机网络思维导图 (免费下载)
  15. 12、说说梯度下降法
  16. 《实战数据库营销——大数据时代轻松赚钱之道》新书试读+文摘
  17. 重庆市计算机专业高考试题,职业高中高考计算机专业试卷5
  18. linux定时定点指令
  19. 预测性维护 - 基础入门
  20. Python编曲实践(五):通过编写爬虫来爬取海量MIDI文件,预备构建数据集(附有百度云下载链接)

热门文章

  1. 太原科技大学计算机院李建伟,李俊林-太原科技大学应用科学学院
  2. 编辑框的ModifyStyle具体怎么用?
  3. Qt简单的创建文件夹
  4. nil和NULL 的区别
  5. 在电影院看的《玩命快递3》
  6. Windows 7 改变文本区或文本框的颜色
  7. 2011NBA季后赛playbyplay数据库
  8. Lisp 1 - 概览/安装配置(sbcl)
  9. Google Chrome离线安装包下载 谷歌浏览器下载
  10. drwxr-xr-x 2 root root 4096 06-29 14:30 Test 分段解释