本文由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" >

近期自己搭建了一个网站,以后我的博客会转移到个人网站,欢迎大家关注~ 网址是http://purplesword.info

安卓动画知识总结 Animation AnimationSet LayoutAnimation相关推荐

  1. 安卓动画全解:补间动画(视图动画)、布局动画、属性动画、逐帧动画。动画Animation属性、Alpha属性、Scale属性、Translate属性、Rotate属性,动画集AnimationSet

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓动画全解:补间动画(视图动画).布局动画.属性动画.逐帧动画. 主要内容包含:动画Animation属性.Alpha属性.Scale属性.Tran ...

  2. 安卓动画的简单实现方法(Animation和AnimationDrawable)

    Animation-补间动画(Tweened Animation) 实例先行: activity.xml: <LinearLayoutandroid:id="@+id/winpay_l ...

  3. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  4. 移动应用程序设计基础——安卓动画与视音频播放器的实现

    <移动应用程序设计基础>实验6 安卓动画与视音频播放器的实现 实验名称: 实验6 安卓动画与视音频播放器的实现 所使用的工具软件及环境: JDK1.8,Android Studio 一.实 ...

  5. 安卓 动画的深入分析

    安卓的动画可以分为三种:View动画,帧动画和属性动画. 帧动画是View动画的一种 view动画 对场景里的对象进行图片变换(平移,缩放,旋转,透明度)从而产生动画效果,是一种渐进式动画,并且支持自 ...

  6. android动画能超过父容器吗,Android中你不得不知道的动画知识 (一)

    动画基础 在日常开发中,我们往往不是仅仅局限于实现产品相应的功能就可以了,为了达到更好的用户体验我们还会加入一些比较好看的动画效果.今天我就来总结一下动画相关的一些知识. Android系统提供了很多 ...

  7. 安卓动画入门_网络动画入门

    安卓动画入门 无论您是刚刚开始使用基础知识还是想探索更高级的技术,我们已经构建了完整的指南来帮助您学习CSS和为CSS 设置动画 . 网络动画入门 近年来,Motion已成为Web设计领域中非常重要的 ...

  8. [0 to 0.5]从零开始学习Android动画知识(中)

    [0 to 0.5]从零开始学习Android动画知识(中) 属性动画(Property Animation) 属性动画(Property Animation)是在 Android 3.0(API 1 ...

  9. 安卓动画系统 - 安卓R

    重要类介绍 Animation Animation定义在frameworks/base/core/java/android/view/animation/Animation.java,其子类有Tran ...

最新文章

  1. Docker火遍全球!Docker(Inc)这家公司却要死了???
  2. X window的思想和终端的重大意义
  3. hicharts Linux服务器导出,中文字体问题
  4. 《Java遗传算法编程》—— 1.5 生物进化
  5. java 内部类异常_Java笔记(三 内部类、异常、编程规范)
  6. html 表格_UiPath之发送正文包含表格的邮件(通过Html实现表格)
  7. [转] 设计模式的六大设计原则
  8. P6466-分散层叠算法(Fractional Cascading)【模板】
  9. jenkins 新手入门安装失败_树莓派安装jenkins,安安静静做个持续集成打包机
  10. Java学习--内部类
  11. java url 本地文件是否存在_我的应用程序知道URL中是否存在文件会一直停止[重复]...
  12. php2个数字拼接,PHP合并2个数字键数组值示例详解
  13. opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
  14. 西洋的AI作曲家,发布了一张中国风音乐专辑
  15. 五种基于RGB色彩空间统计的皮肤检测算法
  16. 软件程序设计中的N-S图、PAD图、程序流程图、E-R图
  17. 超纤商标为精美时尚服饰再添点睛之笔
  18. 为什么mydock会经常崩溃_MyDock
  19. VScode 用socks5代理连接远程服务器
  20. AdGuard2022手机电脑广告拦截工具

热门文章

  1. mysql 高性能压力测试(总结了好久)
  2. Truncate a table
  3. GNS3 搭配 secureCRT 安装配置与使用心得
  4. ffmpeg文档2:输出到屏幕
  5. springboot初始化逻辑_SpringBoot——启动初始化数据
  6. 大学计算机基础知识点_阿里云大学和腾讯云大学的计算机基础课程
  7. 查询sql一个字段重复的数据mysql_sql查询按两个字段查询重复记录
  8. oracle配置的监听文件,配置oracle监听文件
  9. 鸿蒙开发者有多少,鸿蒙开发者beta版本申请通过的过来人有几句话要说
  10. python编译器怎么运行不在路径中的py文件_对python当中不在本路径的py文件的引用详解...