android属性动画详解

开发中,使用属性动画是较为多的,可以满足几乎所有的需求。

**属性动画的生效的条件:**必须都满足
1,具有该作用的属性
2,其属性具有set和get方法

所有针对属性动画不生效具体的解决方案如下:
1,给对象加上get和set方法,如果有权限的话
2,用一个类包装原始对象,间接的为其提供get和set方法
3,采用ValueAnimator,和TypeEvaluator估值器去,监听动画过程,自己实现属性的改变

针对2和3具体事例如下:
事例2:
ViewWrapper为包装类
ViewWrapper viewWrapper = new ViewWrapper(viewById);
ObjectAnimator.ofInt(viewWrapper,“width”,500).setDuration(5000).start();

public class ViewWrapper {

    private View mTarget;

    public ViewWrapper(View arget){
        mTarget = arget;
    }

    public int getWidth(){
        return mTarget.getLayoutParams().width;
    }

    public void setWidth(int width){
        mTarget.getLayoutParams().width = width;
        mTarget.requestLayout();
    }
}

事例3:

 private void performAnimator(final TextView viewById, final int width, final int end) {
        ValueAnimator valueAnimator = ValueAnimator.ofInt(1,100);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

            //持有一个 估值器IntEvaluator对象,方便下面估值的时候使用
            private IntEvaluator mEvaluator = new IntEvaluator();
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                //获取当前动画的进度值,整型,1~·100之间
                int currentValue = (int) valueAnimator.getAnimatedValue();
                Log.e("aa",currentValue+"");

                //获取当前进度占整个动画过程的比例,浮点型,0~1之间
                float fraction = valueAnimator.getAnimatedFraction();
                //直接调用整数型估值器,通过比例计算出宽度,然后再设给控件
                viewById.getLayoutParams().width = mEvaluator.evaluate(fraction,width,end);
                viewById.requestLayout();
            }
        });
        valueAnimator.setDuration(5000).start();
    }

属性动画的原理:简单的来说就是不断的调用属性set方法,
属性动画要求动画作用的对象提供该属性的set方法,属性动画根据传递的属性的初始值和最终值,以动画的效果多次去调用set方法,每次传递给set方法的值不一样,随着时间的推移,所传递的值,越来越接近最终值,如果动画没有提供初始值,就需要提供get方法。系统会获取该属性的初始值

最后属性动画注意事项:
1,setVisity(GONE)动画隐藏失效的问题,可以调用view.clearAnimation()清除view的动画
2,动画过程中,有使用单位的,尽量使用dp,不要使用px,会导致不同设备效果不一样
3,动画过程中,建议开启硬件加速

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值