• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android中的属性动画(Property Animation)——Android开发艺术探索笔记

Android中的属性动画(Property Animation)——Android开发艺术探索笔记

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了property animation,android property,android propertyname,android property set,android getproperty等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android中的属性动画(Property Animation)——Android开发艺术探索笔记


Animator最早出现在Android 3.0 中,和之前的Animation框架相比,Animator更加的灵活并且具有更多的功能,官方推荐使用Animator代替Animation。在3.0之前可以使用nineoldandroids来实现相同的效果。

使用Animator前需要先了解几个概念:

Duration:动画播放时间 Time interpolation:属性值随着时间的改变情况,比如线性增长或者先快后慢 Repeat count:动画重复播放次数 Animator sets:动画集,可以使多个动画同时播放或者顺序播放 Frame refresh delay:动画每一帧的刷新时间,一般默认10ms刷新一次

Property Animation

Property Animation非常强大,他可以让你几乎在任何东西上播放动画。Property Animation的结构如下图:
这里写图片描述
ValueAnimator用来跟踪动画运行的时间和属性的值。其中TimeInterpolator指定了动画的 interpolation,如AccelerateDecelerateInterpolator。TypeEvaluator指定属性的值如何计算比如IntEvaluator.

示例

点击一个Button,Button的宽和高分别增加到500dp和400dp。
Click

Property Animation与View Animation的区别

View Animation只能对View添加动画 View Animation只能改变如scale、rotation等值,不能改变background color等属性 View Animation改变的只是View画的位置,并不是真正的View,比如一个button从左到右移动,触发onClick方法的位置还是初试的位置。 View Animation实现起来比Property Animation简单

Evaluator

以IntEvaluator为例,源码如下:

   public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
        int startInt = startValue;
        return (int)(startInt + fraction * (endValue - startInt));
    }

很简单,就是根据初始值,结束值和当前时间与总时长的比例这三个值计算出当前某属性应该的值。

Animator

Animator提供了创建动画的基本结构,通常我们不直接使用它,而是使用它的子类。

ValueAnimator

使用ofInt(), ofFloat(), 或者 ofObject()方法来获得ValueAnimator实例

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.start();

当然也可以自定义类型

ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
animation.setDuration(1000);
animation.start();

示例动画的源码

  button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final IntEvaluator mEvaluator = new IntEvaluator();
                ValueAnimator valueAnimator = ValueAnimator.ofInt(1, 100);
                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator valueAnimator) {
                        float fraction = valueAnimator.getAnimatedFraction();
                        button.getLayoutParams().width = mEvaluator.evaluate(fraction, button.getWidth(), 500);
                        button.getLayoutParams().height = mEvaluator.evaluate(fraction, button.getHeight(), 400);
                        button.requestLayout();
                    }
                });
                valueAnimator.setDuration(1000).start();
            }
        });

注:别忘了 button.requestLayout()和valueAnimator.setDuration(1000).start()。

ObjectAnimator

ObjectAnimator是ValueAnimator 的子类。可以直接对目标属性计算。
对foo这个对象的alpha属性做从0到1的变化,代码如下:

ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
anim.setDuration(1000);
anim.start();

为了使ObjectAnimator正常运行,还需要如下步骤:

要修改的属性必须有set方法,如setFoo() 如果你在values…参数中只指定了一个参数,默认为这是最后一个参数。参数必须有get方法,如getFoo() 有些属性需要手动刷新,所以要在onAnimationUpdate() 中调用invalidate()。

如果没有要修改的属性必须有set方法,有如下三个解决办法:

如果有权限,添加set方法
但是很多情况下我们是没有的… 使用这个类的wrapper class(包装类)
ObjectAnimator.ofFloat(wrapper, “alpha”, 0f, 1f),在这个包装类的setAlph中对原来View的alpha属性值进行更改 使用ValueAnimator

AnimatorSet

一个Set中包含多个动画,使用起来也很方便,直接上代码。

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();

在XML中声明动画

新建res/animator/目录
每种Animator对应的标签

ValueAnimator - ObjectAnimator - AnimatorSet -
<code class="language-html hljs "><set android:ordering="sequentially">
    <set>
        <cke:objectanimator android:propertyname="x" android:duration="500" android:valueto="400" android:valuetype="intType">
        <cke:objectanimator android:propertyname="y" android:duration="500" android:valueto="300" android:valuetype="intType">
    </cke:objectanimator></cke:objectanimator></set>
    <cke:objectanimator android:propertyname="alpha" android:duration="500" android:valueto="1f">
</cke:objectanimator></set></code>

在Activity中调用

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.anim.property_animator);
set.setTarget(myObject);
set.start();

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android中的属性动画(Property Animation)——Android开发艺术探索笔记

相关文章

  • 2017-05-26Android特效专辑(九)——仿微信雷达搜索好友特效,逻辑清晰实现简单
  • 2017-05-26android studio 中去除应用标题栏,androidstudio
  • 2017-05-26ACCESS 触发器delete table事件变量使用及连续删除
  • 2017-05-26Android系统属性简介,android属性简介
  • 2017-05-26安卓开源项目周报0117,安卓开源项目0117
  • 2017-05-26产品原型图设计,产品原型图
  • 2017-05-26安卓图片加载之使用universalimageloader加载圆形圆角图片
  • 2017-05-26Android GZIP压缩IO流,优化APP数据传输(一),androidapp
  • 2017-05-26TCP的三次握手,TCP三次握手
  • 2017-05-26Android中TextView设置最大长度,超出显示省略号,androidtextview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 有主线程发送message给子线程,主线程发送message
    • 使用ContentProvider访问非数据库数据
    • 第一节 搭建开发环境,第一节搭建开发
    • Android Plugin,androidplugin
    • Android四种常见设计模式说明
    • Android 弱引用和软引用,android引用和软
    • 4.5.1 Intent的基本使用
    • linux设备驱动程序之时钟管理(2)----又见结构
    • 我的android学习经历4,android学习经历4
    • Android便携式热点的开启状态检测和SSID的获取,android热点ssid

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有