文档章节

安卓 动画小结

cicue
 cicue
发布于 2016/02/29 14:35
字数 1889
阅读 46
收藏 5
  • 补间动画(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
博文 111
码字总数 75311
作品 0
徐汇
私信 提问
《Android应用开发揭秘》超低价团购(已卖完)

注:团购价包含运费!此书在当当网售价51.80元。 《Android应用开发揭秘》内容简介: 国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性毋庸置疑! 本书内容全面,不仅详细...

老枪
2010/07/19
1K
17
开源中国2010年图书赠送活动《Android应用开发揭秘》

活动内容: 参与活动者请从现在开始,到2010年3月1日这段时间内,对Oschina独家发布的《Android应用开发揭秘》一书内容章节进行客观点评,及大家可以就该技术的趋势和定位提出一些看法,只要...

红薯
2010/01/25
5.9K
203
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
andriod一个不错的启动菜单显示屏动画效果

看到一个老外做的不错的android启动菜单的动画效果,小结下。 1 首先在drawable目录下放一些动画要用的图片。 2 splash.xml: < LinearLayout xmlns:android="http://schemas.android.com/apk...

长平狐
2012/08/21
505
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
27分钟前
0
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
8
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
4
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
昨天
5
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部