文档章节

安卓 动画小结

cicue
 cicue
发布于 2016/02/29 14:35
字数 1889
阅读 42
收藏 5
点赞 1
评论 0
  • 补间动画(Tween Animation)

a. 渐变动画支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(Alpha)。

b. 只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应。

c. 组合使用步骤较复杂。

d. View Animation 也是指此动画。

  • 帧动画(Frame Animation)

a. 用于生成连续的Gif效果图。

b. DrawableAnimation也是指此动画。

  • 属性动画(Property Animation)

a. 支持对所有View能更新的属性的动画(需要属性的setXxx()和getXxx())。

b. 更改的是View实际的属性,所以不会影响其在动画执行后所在位置的正常使用。

逐帧动画 frame_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    <!-- android:oneshot="false" 表示不循环播放 -->
    <item
        android:drawable="@drawable/ni"
        android:duration="500"/>
    <item
        android:drawable="@drawable/hao"
        android:duration="500"/>
    <item
        android:drawable="@drawable/huan"
        android:duration="500"/>
    <item
        android:drawable="@drawable/yin"
        android:duration="500"/>
    <item
        android:drawable="@drawable/lai"
        android:duration="500"/>
    <item
        android:drawable="@drawable/dao"
        android:duration="500"/>
    <item
        android:drawable="@drawable/wo"
        android:duration="500"/>
    <item
        android:drawable="@drawable/de"
        android:duration="500"/>
    <item
        android:drawable="@drawable/bo"
        android:duration="500"/>
    <item
        android:drawable="@drawable/ke"
        android:duration="500"/>

</animation-list>

java中代码

//anim的backgroud="@anim/frame_anim"
final ImageView anim = (ImageView) findViewById(R.id.anim);
final AnimationDrawable animation = (AnimationDrawable) anim
				.getBackground();
				
animation.start();
animation.stop();

http://download.csdn.net/download/qq_26972449/9373567参考例子

补间动画 透明

<alpha   xmlns:android="http://schemas.android.com/apk/res/android"   
    android:fromAlpha="0.1"     
    android:toAlpha="1.0"     
    android:duration="1000"  
    />
fromAlpha 属性为动画起始时透明度
toAlpha   属性为动画结束时透明度      
0.0  表示完全透明
1.0  表示完全不透明
duration  属性为动画持续时间  时间以毫秒为单位

java代码

AnimationalphaAnimation=new AlphaAnimation(1, (float) 0.1);
alphaAnimation.setDuration(3000);//设置动画持续时间为3秒
alphaAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(alphaAnimation);

AnimationalphaAnimation2=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画
imgShow.startAnimation(alphaAnimation2);

旋转

<rotate      
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"     
    android:fromDegrees="0"     
    android:toDegrees="+350"             
    android:pivotX="50%"     
    android:pivotY="50%"         
    android:duration="3000" />   

    <!-- rotate 旋转动画效果属性:
interpolator 指定一个动画的插入器   
accelerate_decelerate_interpolator   加速-减速动画插入器
accelerate_interpolator              加速-动画插入器
decelerate_interpolator              减速-动画插入器
fromDegrees 属性为动画起始时物件的角度
toDegrees   属性为动画结束时物件旋转的角度
可以大于360度
说明:      
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)       
(负数from——to负数:逆时针旋转)     
(正数from——to正数:顺时针旋转)      
(正数from——to负数:逆时针旋转)           
pivotX     属性为动画相对于物件的X坐标的开始位置
pivotY     属性为动画相对于物件的Y坐标的开始位置
说明:        以上两个属性值从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
长整型值:duration  属性为动画持续时间 时间以毫秒为单位-->

java代码

AnimationrotateAnimation=new RotateAnimation(0, 45);
rotateAnimation.setDuration(3000);//设置动画持续时间为3秒
rotateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(rotateAnimation);
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

缩放

<?xml version="1.0" encoding="utf-8"?>      
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    >
<!-- 尺寸伸缩动画效果scale      
属性:interpolator 指定一个动画的插入器  
accelerate_decelerate_interpolator  加速-减速 动画插入器
accelerate_interpolator        加速- 动画插入器
decelerate_interpolator        减速- 动画插入器
其他的属于特定的动画效果
浮点型值:fromXScale 属性为动画起始时X坐标上的伸缩尺寸
toXScale   属性为动画结束时X坐标上的伸缩尺寸
fromYScale 属性为动画起始时Y坐标上的伸缩尺寸
toYScale   属性为动画结束时Y坐标上的伸缩尺寸
startOffset  属性为从上次动画停多少时间开始执行下个动画
说明:      以上四种属性值
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
pivotX     属性为动画相对于物件的X坐标的开始位置
pivotY     属性为动画相对于物件的Y坐标的开始位置
说明:      
以上两个属性值从0%-100%中取值50%为物件的X或Y方向坐标上的中点位置
长整型值:duration  属性为动画持续时间 时间以毫秒为单位
布尔型值: fillAfter 属性当设置为true ,该动画转化在动画结束后被应用
-->

<scale       
android:interpolator="@android:anim/accelerate_decelerate_interpolator"     
android:fromXScale="1"     
android:toXScale="1"     
android:fromYScale="0"     
android:toYScale="1"      
android:pivotX="0"     
android:pivotY="1"  
android:startOffset="1"    
android:duration="700" />     
</set>

java 代码

Animationscale Animation=new ScaleAnimation(0.5f, 1.0f,1.0f, 1.0f);
scaleAnimation.setDuration(2000);//设置动画持续时间为3秒
scaleAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
scaleAnimation.setRepeatCount(3);
imgShow.startAnimation(scaleAnimation);
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
             Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

移动

<?xml version="1.0" encoding="utf-8"?>
<!-- translate 
整型值:      
fromXDelta 属性为动画起始时X坐标上的位置
toXDelta   属性为动画结束时X坐标上的位置
fromYDelta 属性为动画起始时Y坐标上的位置
toYDelta   属性为动画结束时Y坐标上的位置
注意:      
没有指定fromXType toXType from YType toYType 时候,默认是以自己为相对参照物长整型值:
duration  属性为动画持续时间
说明:时间以毫秒为单位-->     
<translate   xmlns:android="http://schemas.android.com/apk/res/android"  
 android:fromXDelta="0"     
 android:toXDelta="10"     
 android:duration="1000" 
 android:interpolator="@anim/cycle_4"
/>

Java 代码

AnimationtranslateAnimation=new TranslateAnimation(0, 100, 0, 0);
translateAnimation.setDuration(3000);//设置动画持续时间为3秒
translateAnimation.setInterpolator(this, android.R.anim.cycle_interpolator);//设置动画插入器
translateAnimation.setFillAfter(true);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置)
imgShow.startAnimation(translateAnimation);

多个动画组合

AnimationSet animationSet = new AnimationSet(true);
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
      Animation.RELATIVE_TO_SELF,0.5f,
      Animation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(1000);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(alphaAnimation);
image.startAnimation(animationSet);


属性动画

相关的类

ObjectAnimator  动画的执行类,后面详细介绍

ValueAnimator 动画的执行类,后面详细介绍 

AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。

AnimatorInflater 用户加载属性动画的xml文件

TypeEvaluator  类型估值,主要用于设置动画操作属性的值。

总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。

ObjectAnimator//  
 .ofFloat(view, "rotationX", 0.0F, 360.0F)// x轴旋转 
 .setDuration(500)//  
 .start();  
 
 //rotationY Y轴旋转
 //rotation  旋转
 
 //translationX X轴移动
 //translationY Y轴移动
 
 //scaleX X轴缩放
 //scaleY Y轴缩放
 ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "scaleX", 0F, 1F,0F,2F);
 //alpha 透明度
 ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "alpha", 0F, 1F,0F);

多个动画

//同步动画设计
PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX", 0, 360F);
PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationY", 0, 360F);
PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("rotation", 0, 360F);
ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2 ,p3).setDuration(1000).start();

//通过AnimatiorSet来设计同步执行的多个属性动画
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F);//X轴平移旋转
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F);//Y轴平移旋转
ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);//360度旋转
AnimatorSet set = new AnimatorSet();
set.playSequentially(animator1, animator2, animator3);//分步执行
set.playTogether(animator1, animator2, animator3);//同步执行
 
//属性动画的执行顺序控制
set.play(animator3).with(animator1);  //同步
set.play(animator2).after(animator3); //异步
 
set.setDuration(1000);
set.start();

属性动画更多高级用法

http://blog.csdn.net/guolin_blog/article/details/43536355

http://blog.csdn.net/guolin_blog/article/details/43816093


© 著作权归作者所有

共有 人打赏支持
cicue
粉丝 14
博文 109
码字总数 75151
作品 0
徐汇
Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy
06/29
0
0
Android技能树 — Rxjava取消订阅小结(1):自带方式

前言: Android技能树系列: Android基础知识 Android技能树 — 动画小结 Android技能树 — View小结 Android技能树 — Activity小结 Android技能树 — View事件体系小结 Android技能树 — ...

青蛙要fly
05/29
0
0
Android技能树 — 树基础知识小结(一)

前言: 现在安卓面试,对于数据结构的问题也越来越多了,也经常看到别人发的面试题都是问什么红黑树,二叉树查找等,所以我们虽然不会马上就会各种难的面试题,但起码树的基础知识还是要会的...

青蛙要fly
05/04
0
0
Android动画效果 translate、scale、alpha、rotate

Android的动画效果分为两种,一种是tweened animation(补间动画),第二种是frame by frame animation。 一般我们用的是第一种。补间动画又分为AlphaAnimation,透明度转换 RotateAnimation,...

黑马108
2012/10/19
0
0
Android中Activity的切换动画(非overridePendingTransition)

摘自:http://fuyunhe.iteye.com/blog/1834874 我们知道,在Manifest文件中声明Activity时,可以通过android:theme属性设置Activity的主题。主题中定义了关于Activity外观的很多特性。同时,...

HCMore
2014/05/11
0
4
Android应用资源---动画资源(Animation Resources)

有两种类型的动画资源: 属性动画 在设定的时间内,通过修改与Animator类相关的对象的属性值来创建一个动画。 视图动画 有两种类型的视图动画框架 补间动画(Tween animation):通过执行通过...

davidpark
2014/02/01
0
0
常见的四种Animation详解(深入可以制作效果动画)

anim.xml 放入res文件中自己创建,4种常用的动画效果,每个加入了注释 <?xml version="1.0" encoding="UTF-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- T......

子曰疯
2013/11/21
0
1
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》上线了

感谢大家一直以来的支持! 各大商店均开始销售: 京东:http://item.jd.com/11659698.html 当当:http://product.dangdang.com/23659808.html 《Cocos2d-x实战 JS卷 Cocos2d-JS开发》源码及样...

智捷课堂
2015/03/26
0
0
《解析 Google Android DSK-智能手机开发范例手册》.(薛显亮).[PDF]&...

图书作者: 薛显亮 图书编号: 9787113143596 图书格式: PDF 出 版 社: 中国铁道出版社 出版年份: 2012 图书页数: 400-500 [内容简介] 《解析google android sdk——智能手机开发范例手册》基于...

ckook
2013/06/12
0
0
Android动画开发——Animation动画效果

动画类型 Android的animation由四种类型组成 XML中 JavaCode中 Android动画模式 Animation主要有两种动画模式: 一种是tweened animation(渐变动画) 一种是frame by frame(画面转换动画) 如何...

元来元去
2012/03/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
23分钟前
1
0
流利阅读笔记27-20180716待学习

生了娃照样能打,两位母亲温网会师 Lala 2018-07-16 1.今日导读 现今在生儿育女后回归事业的母亲们已经非常多见,但是很少有人想到,以高强度运动与竞争激烈为特色的竞技体育项目也会有 work...

aibinxiao
24分钟前
2
0
Guava 源码分析(Cache 原理【二阶段】)

前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前...

crossoverJie
36分钟前
0
0
OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
407
15
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部