安卓动画知识总结 Animation AnimationSet LayoutAnimation

本文由PurpleSword(jzj1993)原创,转载请注明

原文网址 http://blog.csdn.net/jzj1993

常见动画有几种

控件View的动画(如Dialog窗口中的圆形进度条)

空间Window的动画(如DialogWindow,PopupWindow的动画,Activity切换时整个Window页面的动画)

ViewGroup的LayoutAnimation动画,每个子控件按照设定的顺序、延迟播放动画

动画常用anim/*.xml定义

xml中定义动画,可直接使用<translate><scale><alpha><rotate>标签直接定义,也可以放在<set>标签中,里面定义的动画将同时开始播放。

两者都可使用AnimationUtils.loadAnimation方法加载。如果是set标签定义,加载时返回的是AnimationSet实例(AnimationSet继承自Animation)。

在set标签中设置的一些属性,会直接覆盖它里面定义动画的对应属性,而 AnimationSet的另外一些从Animation继承的属性则无效,下面是AnimationSet类的官方说明。

Represents a group of Animations that should be played together. The transformation of each individual
animation are composed together into a single transform. If AnimationSet sets any properties that its children also set (for example, duration or fillBefore), the values of AnimationSet override the child values.

The way that AnimationSet inherits behavior from Animation is important to understand. Some of the Animation attributes applied to AnimationSet
affect the AnimationSet itself, some are pushed down to the children, and some are ignored, as follows:

    • duration, repeatMode, fillBefore, fillAfter: These properties, when set on an AnimationSet object, will be pushed down to all child animations.
    • repeatCount, fillEnabled: These properties are ignored for AnimationSet.
    • startOffset, shareInterpolator: These properties apply to the AnimationSet itself.

Starting with android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH,
the behavior of these properties is the same in XML resources and at runtime (prior to that release, the values set in XML were ignored for AnimationSet). That is, calling setDuration(500) on
an AnimationSet has the same effect as declaring android:duration="500" in an
XML resource for an AnimationSet object.

常规补间动画:弹跳(移动)

Layout/activity_welcome_anim.xml

(0%p表示占父组件尺寸的百分比)

<?xml version="1.0" encoding="utf-8"?>

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

<translate

android:duration="500"

android:fromXDelta="0"

android:fromYDelta="0%p"

android:interpolator="@android:anim/accelerate_interpolator"

android:toXDelta="0"

android:toYDelta="42%p" />

<translate

android:duration="350"

android:fromXDelta="0"

android:fromYDelta="0"

android:interpolator="@android:anim/decelerate_interpolator"

android:startOffset="500"

android:toXDelta="0"

android:toYDelta="-21%p" />

<translate

android:duration="350"

android:fromXDelta="0"

android:fromYDelta="0"

android:interpolator="@android:anim/accelerate_interpolator"

android:startOffset="850"

android:toXDelta="0"

android:toYDelta="21%p" />

<translate

android:duration="250"

android:fromXDelta="0"

android:fromYDelta="0"

android:interpolator="@android:anim/decelerate_interpolator"

android:startOffset="1200"

android:toXDelta="0"

android:toYDelta="-10%p" />

<translate

android:duration="250"

android:fromXDelta="0"

android:fromYDelta="0"

android:interpolator="@android:anim/accelerate_interpolator"

android:startOffset="1450"

android:toXDelta="0"

android:toYDelta="10%p" />

<translate

android:duration="150"

android:fromXDelta="0"

android:fromYDelta="0"

android:interpolator="@android:anim/decelerate_interpolator"

android:startOffset="1700"

android:toXDelta="0"

android:toYDelta="-5%p" />

<translate

android:duration="150"

android:fromXDelta="0"

android:fromYDelta="0"

android:interpolator="@android:anim/accelerate_interpolator"

android:startOffset="1850"

android:toXDelta="0"

android:toYDelta="5%p" />

</set>

再例如常规补间动画:缩放、透明度

<?xml version="1.0" encoding="utf-8"?>

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

<scale

android:duration="800"

android:fromXScale="0.0"

android:fromYScale="0.0"

android:pivotX="50%"

android:pivotY="50%"

android:toXScale="1.0"

android:toYScale="1.0" />

<alpha

android:duration="800"

android:fromAlpha="0.0"

android:toAlpha="1.0" />

</set>

再如上浮效果(移动、透明度)

<?xml version="1.0" encoding="utf-8"?>

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

android:interpolator="@android:anim/linear_interpolator" >

<translate

android:duration="500"

android:fromXDelta="0"

android:fromYDelta="5%"

android:toXDelta="0"

android:toYDelta="0%" />

<alpha

android:duration="500"

android:fromAlpha="0.0"

android:toAlpha="1.0" />

<alpha

android:duration="100"

android:fromAlpha="1.0"

android:startOffset="1400"

android:toAlpha="1.0" />

</set>

可使用Java程序加载

this.setContentView(R.layout.activity_welcome);

anim = AnimationUtils.loadAnimation(this,

R.anim.welcome_anim);

// 动画效果执行完毕后,View对象保留在终止的位置

anim.setFillEnabled(true);

anim.setFillAfter(true);

    this.findViewById(R.id.point).setAnimation(anim);

还可设置动画监听器

    anim.setAnimationListener(listener);

/**

* 动画监听器

*/

private AnimationListener listener = new AnimationListener() {

@Override

public void onAnimationEnd(Animation animation) {

// startMain();

}

@Override

public void onAnimationStart(Animation animation) {

}

@Override

public void onAnimationRepeat(Animation animation) {

}

};

在Dialog中动画的加载

LayoutInflater inflater = LayoutInflater.from(context);

View v = inflater.inflate(R.layout.dialog_voicenull);

ImageView img = (ImageView) v.findViewById(R.id.dialog_img);

Animation anim = AnimationUtils.loadAnimation(context,

R.anim.center_rotate_repeat);

img.startAnimation(anim);

new AlertDialog.Builder(context).setView(v);

给整个Dialog设置动画

dialog.getWindow().setWindowAnimations(R.style.quick_scale_anim);

给PopupWindow设置动画

pop.setAnimationStyle(R.style.quick_scale_anim);

Activity的切换动画

代码实现Activity切换动画

startActivity(new Intent(this, ListAlarm.class));

overridePendingTransition(R.anim.anim_activity_in,

R.anim.anim_activity_unchange);

或者

ActivityGuide.this.finish();

overridePendingTransition(R.anim.alpha_stay, R.anim.alpha_exit);

    在XML中定义Activity切换动画

Activity切换动画:不能设置SingleInstance属性,会导致动画失效

<style name="activityAnimation" parent="@android:style/Animation">

<item name="android:windowEnterAnimation">@null</item>

<item name="android:windowExitAnimation">@null</item>

<!-- 新的Activity启动时Enter动画 -->

<item name="android:activityOpenEnterAnimation">@anim/slide_left_in</item>

<!-- 新的Activity启动时原有Activity的Exit动画 -->

<item name="android:activityOpenExitAnimation">@anim/keep</item>

<!-- 新的Activity退出时原有ActivityEnter动画 -->

<item name="android:activityCloseEnterAnimation">@anim/keep</item>

<!-- 新的Activity退出时Exit动画 -->

<item name="android:activityCloseExitAnimation">@anim/slide_right_out</item>

</style>

Manifest.xml

<application

android:theme="@style/app_theme" >

<activity

android:name=".ui.ActivityWelcome"

android:theme="@style/app_theme_fullscreen" >

</activity>

</application>

style.xml

<style name="app_theme" parent="@android:style/Theme.Light.NoTitleBar">

<item name="android:windowAnimationStyle">@style/activity_anim</item>

</style>

<style name="activity_anim">

<item name="android:windowEnterAnimation">@anim/quick_alpha_enter</item>

<item name="android:windowExitAnimation">@anim/quick_alpha_stay</item>

</style>

anim/quick_alpha_enter.xml

anim/quick_alpha_stay.xml

LayoutAnimation

1、在 layout_anim_item.xml 中定义子View动画

2、在 layout_anim.xml 中定义Layout动画,并引用子View动画

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

android:animation="@anim/layout_anim_item"

android:animationOrder="normal"

android:delay="0.25" />

3、在ViewGroup中引用自定义Layout动画

<ViewGroup

android:layoutAnimation="@anim/layout_anim" >

时间: 2024-10-13 19:31:37

安卓动画知识总结 Animation AnimationSet LayoutAnimation的相关文章

通过AnimationSet 同步或一部播放多个动画 Android 属性动画(Property Animation) 完全解析 (下)

AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等. 以下例子同时应用5个动画: 播放anim1: 同时播放anim2,anim3,anim4: 播放anim5. AnimatorSet bouncer = new AnimatorSet(); bouncer.play(anim1).before(anim2); bouncer.play(anim2).with(anim3); bouncer.play(anim2).with(a

【Android 动画】View Animation详解(一)

安卓平台目前提供了两大类动画,在Android 3.0之前,一大类是View Animation,包括Tween animation(补间动画),Frame animation(帧动画),在android3.0中又引入了一个新的动画系统:property animation,即属性动画.本篇文章主要介绍View Animation的基本使用方法与技巧,属性动画将在下一篇博文中介绍. Tween动画可以执行一系列简单变换(位置,大小,旋转,缩放和透明度).所以,如果你有一个TextView对象,您

安卓动画为了,写购物车动画,搜集的安卓动画的代码

 Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大多数的控件中. 二.Animations的分类 Animations从总体上可以分为两大类: 1.Tweened Animations:该类Animations提供了旋转.移动.伸展和淡出等效果.Alpha--淡入淡出,Scale--缩放效果,Rotate--旋转,Trans

安卓动画两种基本实现方式

1.代码实现混合动画的方式,这里用到了AnimationSet这个Animation的子类来实现,从底层看该类实现了Animation的大多数方法,构造函数也有好几个. AnimationSet animationSet = new AnimationSet(true);//这里的ture表示所有的动画都使用同一变速器,也就是在布局文件中的set里设置shareInterpolator="true" AlphaAnimation alphaAnimation = new AlphaAn

Android 属性动画(Property Animation) 完全解析 (上)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animation .Drawable Animation .Property Animation .View Animation相当简单,不过只能支持简单的缩放.平移.旋转.透明度基本的动画,且有一定的局限性.比如:你希望View有一个颜色的切换动画:你希望可以使用3D旋转动画:你希望当动画停止时,View的

Android(java)学习笔记263:Android下的属性动画(Property Animation)

1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation). 逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理. 补间动画则是可以对View进行一系列的动画操作,包括淡入淡出.缩放.平移.

android动画之Interpolator和AnimationSet

如果在android中开发复合动画需要使用类AnimationSet 类 利用它的add 方法就可一加入动画 或者使用布局文件 set 加入多个动画就行  不过他们是在同一时间内开始动画的 1 xml代码 2 <?xml version="1.0"encoding="utf-8"?> 3 <setxmlns:android="http: android=""res=""apk=""

Android动画介绍-Tween Animation

3.0以前,android支持两种动画模式,Tween Animation,Frame Animation 在android3.0中又引入了一个新的动画系统:Property Animation 这三种动画模式在SDK中被称为Property Animation,View Animation,Drawable Animation 下面介绍:Tween Animation View Animation(Tween Animation):补间动画,给出两个关键帧,通过一些算法将给定属性值在给定的时间

CSS动画效果之animation

Y(^o^)Y css动画大乱弹之animation. 概述 什么是animation呢?在回答这个问题之前,先要说明什么叫做@keyframe(关键帧).@keyframe算是一个动画模板.在其中,可以使用百分比,如从0%到100%的任意值,分别在每个百分比中,加上不同的属性,从而让元素达到一种在不断变化的动画效果.这和我们制作flash动画一样,我们只需设计几个关键帧,系统就能生成动画啦! 一个@keyframe例子: 1 /*定义关键帧动画*/ 2 @keyframes myframe {