仔细想了一下,发现之前写的东西有很多漏了,改又不好改,只好在这里另写一篇补充了

之前讲到ObjectAnimator但是没有说xml设置方法,在这里提一下

<?xml version="1.0" encoding="utf-8"?>
<objectAnimatorxmlns:android="http://schemas.android.com/apk/res/android"android:valueFrom="0"android:valueTo="1"android:valueType="floatType"android:propertyName="alpha"android:duration="3000"/>
 private class ObjXmlButtonListener implements View.OnClickListener {@Overridepublic void onClick(View v) {Animator animator= AnimatorInflater.loadAnimator(AnimationActivity.this,R.animator.object_animator_test);animator.setTarget(v);animator.start();}}

如果看过前面的文章的话很容易就能看懂,只是多了一个propertyName属性,是要变化的属性名称

下面讲一下常用的视图属性

private class ObjRotationButtonListener implements View.OnClickListener {@Overridepublic void onClick(View v) {ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(v,"rotation",0f,720f);objectAnimator.setDuration(3000);objectAnimator.start();}}private class ObjScaleXButton implements View.OnClickListener {@Overridepublic void onClick(View v) {ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(v,"scaleX",1f,3f,1f);objectAnimator.setDuration(3000);objectAnimator.start();}}private class ObjTranslationXButtonListener implements View.OnClickListener {@Overridepublic void onClick(View v) {float x=v.getTranslationX();ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(v,"translationX",x,300, x);objectAnimator.setDuration(3000);objectAnimator.start();}}

用法很简单,第一个参数要执行动画的对象,第二个属性名称,随后是不定长参数,传的是数值变化路径,打个比方如果a,b两个参数就是a->b,如果a,b,c三个参数,就是a->b->c

下面是视图常用属性

当然了,之前说过,ObjectAnimator可以传任意属性值,只要有对应的get和set方法

拿TranslationX举个例子

public void setTranslationX(float translationX) {if (translationX != getTranslationX()) {invalidateViewProperty(true, false);mRenderNode.setTranslationX(translationX);invalidateViewProperty(false, true);invalidateParentIfNeededAndWasQuickRejected();notifySubtreeAccessibilityStateChangedIfNeeded();}}public float getTranslationX() {return mRenderNode.getTranslationX();}

这些属性都是View所有的,所以凡是继承于View类的对象都可以用这些属性

能用的属性对应的对象内必定有相应的get和set方法,但有相应get和set方法的对象,这个属性不一定能用

因为可能相应的get和set方法不能反映值的变化

比如说如果你想改变Button的宽度,那么传width不会起作用

因为Button和TextView的setWidth方法是设置最大宽度和最小宽度的

public void setWidth(int pixels) {mMaxWidth = mMinWidth = pixels;mMaxWidthMode = mMinWidthMode = PIXELS;requestLayout();invalidate();}

那么遇到这种情况该如何解决呢?

我们可以通过用一个类来包装该对象,给他加上对应的get 和set方法

private class WidthButtonListener implements View.OnClickListener {@Overridepublic void onClick(View v) {ViewWrapper viewWrapper=new ViewWrapper(v);ObjectAnimator.ofInt(viewWrapper, "width", viewWrapper.getWidth(),500).setDuration(3000).start();}}private class ViewWrapper {private View mTarget;public ViewWrapper(View target) {mTarget = target;}public int getWidth() {return mTarget.getLayoutParams().width;}public void setWidth(int width) {mTarget.getLayoutParams().width = width;mTarget.requestLayout();}}

那当我们想要使用多个动画怎么办呢,不要怕,android还提供了AnimatorSet类用于管理动画播放

AnimatorSet.play(Animator anim) :播放当前动画

AnimatorSet.after(long delay) :将现有动画延迟x毫秒后执行

AnimatorSet.with(Animator anim) :将现有动画和传入的动画同时执行

AnimatorSet.after(Animator anim) :将现有动画插入到传入的动画之后执行

AnimatorSet.before(Animator anim) : 将现有动画插入到传入的动画之前执行

举个例子

private class AnimatorSetButtonListener implements View.OnClickListener {@Overridepublic void onClick(View v) {float x=v.getTranslationX();// 步骤1:设置需要组合的动画效果ObjectAnimator translation = ObjectAnimator.ofFloat(v, "translationX", x, 300,x);// 平移动画ObjectAnimator rotate = ObjectAnimator.ofFloat(v, "rotation", 0f, 720f);// 旋转动画ObjectAnimator alpha = ObjectAnimator.ofFloat(v, "alpha", 1f, 0f, 1f);// 透明度动画// 步骤2:创建组合动画的对象AnimatorSet animSet = new AnimatorSet();// 步骤3:根据需求组合动画animSet.play(translation).with(rotate).before(alpha);animSet.setDuration(5000);// 步骤4:启动动画animSet.start();}}

如果有复杂的动画也可以用xml嵌套来写

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:ordering="sequentially"><!--表示Set集合内的动画按顺序进行ordering的属性值:sequentially & togethersequentially:表示set中的动画,按照先后顺序逐步进行(a 完成之后进行 b )together:表示set中的动画,在同一时间同时进行,为默认值--><set android:ordering="together"><!--同时执行--><objectAnimatorandroid:duration="2000"android:propertyName="translationX"android:valueFrom="0"android:valueTo="300"android:valueType="floatType"/><objectAnimatorandroid:duration="3000"android:propertyName="rotation"android:valueFrom="0"android:valueTo="360"android:valueType="floatType"/></set><set android:ordering="sequentially"><!--按顺序执行--><objectAnimatorandroid:duration="1500"android:propertyName="alpha"android:valueFrom="1"android:valueTo="0"android:valueType="floatType"/><objectAnimatorandroid:duration="1500"android:propertyName="alpha"android:valueFrom="0"android:valueTo="1"android:valueType="floatType"/></set>
</set>
private class XmlAnimatorSetButtonListener implements View.OnClickListener {@Overridepublic void onClick(View v) {AnimatorSet animator = (AnimatorSet) AnimatorInflater.loadAnimator(AnimationActivity.this, R.animator.animatorset);// 创建组合动画对象 & 加载XML动画animator.setTarget(v);// 设置动画作用对象animator.start();}}

Android 属性动画(二)相关推荐

  1. Android 属性动画使用(二)

    首先扯点别的:晚上稍微跑了一会步,然后逛了超市,晚饭喝的南瓜粥,吃了一碗面条,今天不是太饿,现在正一边吃着葡萄一边学习,也是没谁了. 比如说,我们想要实现从0过渡到100,使用ValueAnimato ...

  2. Android 属性动画(一)新手入门

    一.属性动画简介 Android 中动画有很多种,属性动画就是其中的一种.所谓的属性动画,就是在指定的时间内,通过改变对象的属性达到变化效果的动画.在 Android 中,属性动画系统是一个强健的框架 ...

  3. Android属性动画完全解析(上),初识属性动画的基本用法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系 ...

  4. android动画封装,Android属性动画封装,快速构建动画

    Android实现动画效果的方式主要有帧动画.补间动画.属性动画.关于安桌动画的基础知识可以查看这篇文章Android属性动画完全解析 这里我要讲的是如何快速构建出一个动画效果,如下图: 如果我们用属 ...

  5. Android属性动画 ObjectAnimator

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118709616 本文出自[赵彦军的博客] 文章目录 ObjectAnimator ...

  6. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

  7. android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...

    大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...

  8. Android 系统(196)---Android 属性动画

    Android 属性动画 属性动画 总结&攻略 前言 动画的使用 是 Android 开发中常用的知识 本文将详细介绍 Android 动画中 属性动画的原理 & 使用 动画类型 关于 ...

  9. Android 属性动画Property Animation(中)

    Android 属性动画Property Animation(上)介绍了属性动画的概念以及相关的类和接口,本篇来看下具体肿么使用. ValueAnimator ValueAnimator指定整形.浮点 ...

  10. android+属性动画+高度,android 自定义view+属性动画实现充电进度条

    近期项目中需要使用到一种类似手机电池充电进度的动画效果,以前没学属性动画的时候,是用图片+定时器的方式来完成的,最近一直在学习动画这一块,再加上复习一下自定义view的相关知识点,所以打算用属性动画和 ...

最新文章

  1. c语言蜂鸣警报加循环,如何在此单片机程序基础上加入蜂鸣器报警啊
  2. EchoesWorks —— 打造下一代技术Blog/Presentation 框架(招兵买马)
  3. pytest使用简介
  4. 美国的机器人军团要来了吗?
  5. 全球及中国二乙氨基羟基苯甲酰基苯甲酸己酯行业规模分析与市场需求预测报告2022版
  6. 流与文件 java_java流与文件处理,请看代码:
  7. idea 一直在build_让web开发部署提速 8 倍的一款 IDEA 插件,你有在用?
  8. Java 8:Lambda表达式与自动关闭
  9. 人脸识别错误代码437是什么意思_lol手游repeat ready check fails什么意思 解决攻略大全...
  10. Valgrind动态分析工具
  11. 反编译工具ILSpy的下载与使用
  12. Informatic学习总结_day01
  13. java 通过 ip地址 找到 打印机_有没有办法使用java套接字程序找到打印机状态?...
  14. 科兴与香港大学临床试验中心研究团队和香港港怡医院合作,在中国香港启动奥密克戎特异性灭活疫苗加强剂临床试验
  15. redis---incr命令
  16. IE浏览器下载文本文件(txt,csv等)
  17. linux驱动文件目录
  18. Apache占用tcp6的80端口
  19. 同时拿到网易和微信的offer!!他是怎么做到的?
  20. 思科华为H3C锐捷交换机路由器AP等console线

热门文章

  1. css阴影设置透明度,css3圆角 阴影 透明度
  2. xt711无法开机时的解决方法-网上找的,很管用
  3. 4g能达到多少兆_4G网络是多少M宽带
  4. 世界之窗浏览器TheWorld 2.0.6.4(论坛预览版)
  5. 滴滴外卖再扩张,这次美团真的是惹火烧身了
  6. java查看kafka数据量_Java kafka监控 topic的数据量count情况,每个topic的offset,
  7. APP免费渠道,运营者不可不知的基础常识
  8. “清理僵尸粉”惊天骗局:微信被黑客控制,聊天记录被黑客监视
  9. 关于GCC的stack-protector选项
  10. Android studio创建一个根目录生成手电修改参数app