Android 补间动画(Tween Animation)
Tween Animation(补间动画):
Tween动画,通过对View的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也可以采用编码来做。
动画类型 | XML配置方式 | Java代码实现方式 |
渐变透明度动画效果 | <alpha/> | AlphaAnimation |
渐变尺寸缩放动画效果 | <scale/> | ScaleAnimation |
画面旋转动画效果 | <rotate/> | RotateAnimation |
画面位置移动动画效果 | <translate/> | TranslateAnimation |
组合动画效果 | <set/> | AnimationSet |
下面以java 和 xml 的方式具体说下使用
1 平移动画
'效果图如下
1.1 java的方法实现
//平移动画/*** java代码实现*/TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 0, 600);translateAnimation.setRepeatMode(Animation.REVERSE);// 设置动画模式 这里是动画重复translateAnimation.setRepeatCount(5); // 设置动画的次数 当为-1的时候重复动画translateAnimation.setFillAfter(true); // 设置为false的时候动画走走完回到原来的位置,true是动画结束之后位置不会改变translateAnimation.setDuration(2000); // 动画持续时间img.startAnimation(translateAnimation); // 开始动画
这样就实现了上下移动的动画,其他的移动设置参数即可
1.2 以xml 的方法实现
首先在res 目录下创建一个anim 目录然后在创建一个xx.xml 的文件里面内容如下
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="2000"android:fillBefore="true"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="0"android:toYDelta="600" />
当然最外层也可以添加一个set 这个看个人习惯把
android:duration="2000" ---->动画持续时间
android:fillBefore="true" ---> 如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态 和fillAfter类似不过true和false 功能却相反的
android:fromXDelta="0" ---->起始时X座标
android:fromYDelta="0"---->起始时Y座标
android:toXDelta="0"---->结束时X座标
android:toYDelta="600"---->结束时Y座标
然后java 内容
TranslateAnimation translateAnimation = (TranslateAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.translate);translateAnimation.setFillAfter(true);img.startAnimation(translateAnimation);
2 渐变透明度动画
效果如下
2.1 以java 实现
//透明度动画AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0.5f);alphaAnimation.setRepeatMode(Animation.REVERSE); // 设置动画的次数 当为-1的时候重复动画alphaAnimation.setFillAfter(true); // 设置为false的时候动画走走完回到原来的位置,true是动画结束之后位置不会改变alphaAnimation.setDuration(2000); // 动画持续时间img.startAnimation(alphaAnimation);
2.2 以xml 方式实现
首先在res 目录下创建一个anim 目录然后在创建一个xx.xml 的文件里面内容如下
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:fillBefore="true"android:fromAlpha="1.0"android:toAlpha="0.1"/>
android:duration="3000" ---->动画持续时间
android:fillBefore="true" ----->如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态 和fillAfter类似不过true和false 功能却相反的
android:fromAlpha="1.0"------>开始时透明度
android:toAlpha="0.1"------->结束时透明度
java 代码
AlphaAnimation alphaAnimation = (AlphaAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.alpha);img.startAnimation(alphaAnimation);
3 缩放动画
效果如下
3.1 以java 代码实现
//缩放动画ScaleAnimation scaleAnimation = new ScaleAnimation(1, 2, 1, 2, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF);scaleAnimation.setRepeatMode(Animation.REVERSE); // 设置动画模式 这里是动画重复scaleAnimation.setRepeatCount(5); // 设置动画的次数 当为-1的时候重复动画scaleAnimation.setFillAfter(true); // 设置为false的时候动画走走完回到原来的位置,true是动画结束之后位置不会改变scaleAnimation.setDuration(2000); // 动画持续时间img.startAnimation(scaleAnimation);
3.2 以xml 代码实现
首先在res 目录下创建一个anim 目录然后在创建一个xx.xml 的文件里面内容如下
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"android:duration="700"android:fromXScale="1.0"android:fromYScale="1.0"android:pivotX="50"android:pivotY="50"android:toXScale="0.0"android:toYScale="0.0" />
android:duration="700" ---->动画持续时间 android:fromXScale="1.0" --->开始前X的缩放,0.0为不显示, 1.0为正常大小 android:fromYScale="1.0"--->开始前Y的缩放,0.0为不显示, 1.0为正常大小 android:pivotX="50" ---> 动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从自身中间开始 android:pivotY="50" android:toXScale="0.0" --->动画最终缩放的倍数, 1.0为正常大小,大于1.0放大 android:toYScale="0.0"
java 代码调用
ScaleAnimation scaleAnimation = (ScaleAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.scale);img.startAnimation(scaleAnimation);
4 旋转动画
效果如下
4.1 以java 代码实现
RotateAnimation rotateAnimation = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF);rotateAnimation.setRepeatMode(Animation.REVERSE); // 设置动画模式 这里是动画重复rotateAnimation.setRepeatCount(5); // 设置动画的次数 当为-1的时候重复动画rotateAnimation.setRepeatMode(Animation.REVERSE); // 设置动画的次数 当为-1的时候重复动画rotateAnimation.setFillAfter(true); // 设置为false的时候动画走走完回到原来的位置,true是动画结束之后位置不会改变rotateAnimation.setDuration(2000); // 动画持续时间img.startAnimation(rotateAnimation);
4.2 以xml 代码实现
首先在res 目录下创建一个anim 目录然后在创建一个xx.xml 的文件里面内容如下
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:fillAfter="true"android:fromDegrees="0"android:pivotX="50%"android:pivotY="50%"android:toDegrees="-650"/>
android:duration="3000" ---->动画持续时间 android:fillAfter="true" android:fromDegrees="0" ----->动画开始时的角度 android:pivotX="50%" ----->属性为动画相对于物件的X坐标的开始位置 android:pivotY="50%"----->属性为动画相对于物件的Y坐标的开始位置 android:toDegrees="-650" ---->动画结束时物件的旋转角度,正代表顺时针 负代表逆时针
java 代码调用xml
RotateAnimation rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(TweenActivity.this, R.anim.rotate);img.startAnimation(rotateAnimation);
5 上面的几个属性可以合在一起实现效果
5.1 java 代码
ScaleAnimation scaleAnim = new ScaleAnimation(1, 2, 1, 2, Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF);scaleAnim.setRepeatMode(Animation.REVERSE);scaleAnim.setFillAfter(true);scaleAnim.setDuration(2000);scaleAnim.setRepeatCount(1);AlphaAnimation alphaAnim = new AlphaAnimation(1, 0.5f);alphaAnim.setRepeatMode(Animation.REVERSE);alphaAnim.setFillAfter(true);alphaAnim.setDuration(2000);alphaAnim.setRepeatCount(1);AnimationSet set = new AnimationSet(true);set.addAnimation(scaleAnim);set.addAnimation(alphaAnim);img.startAnimation(set);
5.2 以xml 代码实现
首先在res 目录下创建一个anim 目录然后在创建一个xx.xml 的文件里面内容如下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:fillAfter="true"><!-- 各种单独特效的杂糅 --><alphaandroid:duration="1000"android:fromAlpha="0.1"android:toAlpha="1" /><rotateandroid:duration="1000"android:fromDegrees="0"android:pivotX="50%"android:pivotY="50%"android:toDegrees="720" /><scaleandroid:duration="1000"android:fromXScale="0.1"android:fromYScale="0.1"android:toXScale="1.0"android:toYScale="1.0" /><translateandroid:duration="1000"android:fillAfter="true"android:fromXDelta="0"android:fromYDelta="0"android:toXDelta="0"android:toYDelta="600" />
</set>
java 代码调用xml
Animation mutipleAnimation = AnimationUtils.loadAnimation(TweenActivity.this, R.anim.set);img.startAnimation(mutipleAnimation);
具体的可以看下demo github 链接地址点击查看
Android 补间动画(Tween Animation)相关推荐
- android 补间动画有停顿,Android动画原理分析(一)----补间动画
1.基本特点 补间动画(Tween动画),是android最早的动画框架,从Android1.0开始就有. 功能:可以实现移动.旋转.缩放.渐变四种效果以及这四种效果的组合形式. 实现形式:xml和代 ...
- Android平移补间动画,Android 补间动画之平移动画TranslateAnimation
Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...
- android image 位移动画_「translateanimation」Android 补间动画之平移动画TranslateAnimation - seo实验室...
translateanimation 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 durati ...
- android—补间动画(Tween Animation)旋转的血轮眼
Android系统提供了两种实现动画的方式,一种是补间动画(Tween Animation),另一种是帧动画(Frame Animation).补间动画可以实现View组件的移动.放大.缩小以及渐变等 ...
- Android补间动画
概述 本篇博客基于<Android开发艺术探索>,将会介绍以下两种动画: 补间动画 帧动画 事实上帧动画也是补间动画的一种,但是它们的使用方式略有不同,所以将它们分开介绍. 一.补间动画 ...
- 每日一道面试题(第7期)---Android补间动画与属性动画的区别
零零碎碎的东西总是记不长久,仅仅学习别人的文章也只是他人咀嚼后留下的残渣.无意中发现了这个每日一道面试题,想了想如果只是简单地去思考,那么不仅会收效甚微,甚至难一点的题目自己可能都懒得去想,坚持不下来 ...
- Android补间动画笔记
布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...
- android 属性动画 补间动画,每日一道面试题(第7期)---Android补间动画与属性动画的区别...
零零碎碎的东西总是记不长久,仅仅学习别人的文章也只是他人咀嚼后留下的残渣.无意中发现了这个每日一道面试题,想了想如果只是简单地去思考,那么不仅会收效甚微,甚至难一点的题目自己可能都懒得去想,坚持不下来 ...
- Android 补间动画
补间动画使用很简单,几行代码便能实现效果,上图上代码: xml很简单,不用说,先给每个按钮加上点击监听 findViewById(R.id.rotateBtn).setOnClickListener( ...
最新文章
- hdu3336 KMP + DP 前缀数组出现的次数
- 【Py面试题】找到数组或整数列表中连续子序列的最大和
- C# asp:Repeater DataSource ListT
- Lockdoor Framework:一套自带大量网络安全资源的渗透测试框架
- 信息学奥赛一本通C++语言——1030: 计算球的体积
- 【SpringMVC框架】注解的处理器映射器和适配器配置
- 云计算学习总结(1)——PaaS云平台部署之在Centos7搭建Mesos+Zookeeper+Marathon+Docker单机集群...
- 自己动手写Docker系列 -- 4.2使用AUFS包装busybox
- redis thinkphp mysql_Thinkphp5怎么扩展Redis数据库,实现Redis的CURD操作
- 威胁情报 设备之外的安全能力
- K-meas聚类算法极简介绍
- 常用关系型数据库管理系统
- 为什么说精益管理模式是适合中国企业的管理方法(zt)
- 异方差检验 python_stata教程03-异方差的检验和处理
- 人生苦难重重,如何解决人生的问题?| 读《少有人走的路:心智成熟的旅程》
- 保险与赌博的差异,航延险是赌博吗?
- elasticsearch-head离线安装
- 计算机网络——分层的体系结构(OSI模型/五层协议栈)
- SBUS协议(20200210)
- 解决升级Chrome浏览器之后出现跨域错误:Access to xxx has been blocked by CORS policy: XXXX