Android 自定义帧动画
Android 自定义帧动画
Android L ; Android Studio
帧动画
和gif图片类似,顺序播放准本好的图片文件;图片资源在xml文件中配置好
将图片按照预定的顺序一张张切换,即成动画
Android 帧动画例子
可以把动画放进子线程中启动,也可以在主线程直接启动动画
主线程更容易控制动画的启停;
子线程需要关注线程的状态,不好控制动画
主线程的UI不能放进子线程去设置;即子线程不能直接修改主UI;
屏幕旋转后,activity重启;动画也就停止了;
在 AndroidManifest.xml 设置 configChanges 即可
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
动画资源
图片资源来自Android L Launcher3 res
图片全部放在 res/drawable 里面
配置文件 transition_stack.xml
oneshot="false"
动画会一直循环播放下去
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/transition_stack" android:oneshot="false">
<item android:drawable="@drawable/stack_00000" android:duration="30" />
<item android:drawable="@drawable/stack_00001" android:duration="30" />
......
</animation-list>
Java代码
- 1.取得ImageView
- 2.为ImageView设置背景资源文件
3.把ImageView的背景赋给动画AnimationDrawable
public class MainActivity extends AppCompatActivity { private ImageView mTransitionIcon; private ImageView mStackIcon; private AnimationDrawable frameAnimation; private AnimationDrawable stackAnimation; private Thread stackThread; private Button stopButton; public boolean action = false; private TextView tvState; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); tvState = (TextView) findViewById(R.id.tv_state); stopButton = (Button) findViewById(R.id.btn_stop); Button btn1 = (Button) findViewById(R.id.btn1); Button btn2 = (Button) findViewById(R.id.btn2); /************************************************* * AnimationDrawable extends DrawableContainer *************************************************/ // 1.取得ImageView mTransitionIcon = (ImageView) findViewById(R.id.settings_transition_image); // 2.为ImageView设置背景资源文件 mTransitionIcon.setBackgroundResource(R.drawable.transition_none); // 3.把ImageView的背景赋给动画AnimationDrawable frameAnimation = (AnimationDrawable) mTransitionIcon.getBackground(); mStackIcon = (ImageView) findViewById(R.id.transition_stack); mStackIcon.setBackgroundResource(R.drawable.transition_stack); stackAnimation = (AnimationDrawable) mStackIcon.getBackground(); stackThread = new Thread() { @Override public void run() { stackAnimation.start();// 子线程中开始动画 } }; btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { action = !action;// 主线程中控制动画启动与停止 if (action) { frameAnimation.start(); // 启动(重启)动画 } else { frameAnimation.stop(); // 停止动画 } } }); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (stackThread.getState() == (Thread.State.NEW)) stackThread.start();// 放到子线程中开启动画 }// 先查询子线程状态再启动,避免Thread报错导致app退出 }); stopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = "";// 用于显示状态 s = action ? "action! " + stackThread.getState().toString() : "stop!" + stackThread.getState().toString(); tvState.setText(s); } }); } }
Thread 类
状态一览:
/** * A representation of a thread's state. A given thread may only be in one * state at a time. */ public enum State { /** * The thread has been created, but has never been started. */ NEW, /** * The thread may be run. */ RUNNABLE, /** * The thread is blocked and waiting for a lock. */ BLOCKED, /** * The thread is waiting. */ WAITING, /** * The thread is waiting for a specified amount of time. */ TIMED_WAITING, /** * The thread has been terminated. */ TERMINATED }
一个Button用于启动子线程,可以先判断子线程的状态,再决定是否启动
Android 自定义帧动画的更多相关文章
- Android 自定义波浪动画 --"让进度浪起来~"
原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...
- Android使用帧动画内存溢出解决方法
Android使用帧动画内存溢出解决方法https://blog.csdn.net/daitu_liang/article/details/52336015https://blog.csdn.net/ ...
- Android 逐帧动画
原理: 逐帧动画是最简单的一种动画.原理就是把几张图片连续显示出来,以达到动画的效果.就相当于下面这种手绘翻页动画啦~ 实现: 1.需要建立一个animation-list来设置静态图片资源.持续时间 ...
- Android实现帧动画,以及出场时的动画
最近有个小需求,在数据上传的时候加一个上传的动画,然后就寻思着自己写一个帧动画 上传开始的时候调用动画,上传结束通知容器将其删除(这个方法应该不会太耗内存),然后吐槽下gif图片还是我自己一帧一帧从p ...
- android 通过帧动画方式播放Gif动画
注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...
- Android 逐帧动画isRunning 一直返回true的问题
AnimationDrawabl主要通过xml实现逐帧动画,SDK实例如下: An AnimationDrawable defined in XML consists of a single < ...
- Android中帧动画的创建
帧动画,实质上就是快速播放多张连接效果的图片,现在一般可用于下拉刷新时候的headView 实现步骤: 1.首先应该准备一组连接效果的图片 2.在res>drawable目录下创建xml文件,将 ...
- Android 杂谈---帧动画
Android中的动画有 帧动画 属性动画 补间动画 大体思路 1.需要定义存放每一帧的xml文件,放在drawable文件夹下 设置图片路径和duration,以及shot属性,false---&g ...
- Android 逐帧动画( Drawable 动画),这一篇就够了
前言 作为 Android 最常见的两种动画形式,逐帧动画( Drawable 动画),有着极其广泛的应用,它的原理与早起的电影以及 GIF 类似,就是把一张的图,按顺序快速切换,这样一来看上去就好像 ...
随机推荐
- 2-SAT算法
参考blog 参考论文 参考论文 题目 & 题解 裸2-SAT poj3683 poj3207 poj3678 poj3648 2-SAT + 二分法 poj2723 poj2749 hdu3 ...
- Spring框架之IOC(控制反转)
[TOC] 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向 ...
- XCode 8.3 Automatically manage signing 问题
记录iOS证书问题 无意中选择了Personal team,后台自动生成bundle identifier:com.xxx.project,导致不能在Organization team创建,而且在de ...
- 2017年Web前端开发工程师薪资越来越高?
放眼全球,不仅在国内的互联网行业,在国外,前端工程师一样是需求旺盛.供不应求的香饽饽.所以在供不应求的前端招聘市场上,优秀的前端工程师才是有话语权的那一方. 前端开发是做什么的? 前端是互联网时代软件 ...
- [python标准库]XML模块
1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词. ...
- Windows系统如何使用sqlmap
使用方法:需要安装python,不能安装最新版本的python3.2.2只能安装2.6-3.0这些版本,包括2.6,3.0 这里,我提供一个Python的安装包.点击这里下载→ Python2.7 然 ...
- docker 内部组件结构 -- docker daemon, container,runC
Docker, Containerd, RunC : 从 Docker 1.11 开始, docker 容器运行已经不是简单地通过 Docker Daemon 来启动, 而是集成了Container, ...
- centos7下创建数据库和用户
首先需要在centos系统下安装好mysql,这个我已经安装好了,这里就不把过程贴出来了. 第一步:使用root用户登录到mysql数据库: 第二步:创建一个mysql数据库.当第一步登录成功后,便会 ...
- webpack2教程--从入门到放弃
开车之前,先介绍一些npm的命令: :D 进入D盘 mkdir webapp 创建webapp文件夹 cd webapp 进入webapp文件夹 mkdir webapp && cd ...
- git视频教程
git 精简版视频教程-2小时快速入门精华版,小教程很快就可以看完. 旺旺 QQ:Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有非常高的逼格,简单来说就是:高端大气上档次. 这么 ...