Android动画机制-属性动画

目录

一、对任意属性做动画

1、给这个对象加上get和set方法,如果有权限的话

2、用一个类来包装原始对象,间接为其提供get和set方法

3、采用ValueAnimator,监听动画过程,自己实现属性的改变

二、背景色动画

三、制作动画集合

四、使用XML定义属性动画

五、注意事项


        属性动画是API 11新加入的特性,属性动画可以对任何对象做动画,甚至可以没有对象。

        属性动画的原理:属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去调用set方法,每次传递给set方法的值都不一样,确切来说是随着时间的推移,所传递的值越来越接近最终的值。总结一下,我们对object的属性abc做动画,如果想要动画生效,要同时满足两个条件:

(1)、object必须要提供setAbc方法,如果动画的时候没有传递初始值,那么还要提供getAbc方法,因为系统要去取adc属性的初始值(如果这条不满足,程序直接Crash)。

(2)、object的setAbc对属性abc所做的改变必须能够通过某种方法反应出来,比如会带来UI的改变之类的(如果这条不满足,动画无效果,但不会Crash)

                                                                                                                                                            --Android开发艺术探索

一、对任意属性做动画

从前面的满足属性动画所需条件可知,所针对的属性必须有get、set方法。那如果这个属性没有set和get方法呢?

遇到这种情况有三种解决方案:

(1)、给这个对象加上get和set方法,如果有权限的话;

(2)、用一个类来包装原始对象,间接为其提供get和set方法;

(3)、采用ValueAnimator,监听动画过程,自己实现属性的改变。

下面对这三种解决方案进行介绍:

1、给这个对象加上get和set方法,如果有权限的话

        比如我们直接使用LinearLayout,并给它添加个背景,我们知道LinearLayout继承ViewGroup,ViewGroup继承View,ViewGroup和View都是没有setWidth方法的,我们也没有权限去修改LinearLayout的源码实现来给它加上setWidth方法,那这个时候我们如果想要使用这种解决方案的话,我们可以自定义LinearLayout,继承LinearLayout,给它添加个setWidth方法。如下,我们在setWidth方法中设置此控件的布局参数的宽为我们传入的值,然后调用requestLayout重绘。

package com.example.viewanimation;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.LinearLayout;

/**
 * 自定义LinearLayout,添加SetWidth方法.
 */

pub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值