Android动画之属性动画(Property Animation)(二)

紧接着上一篇文章Android动画之属性动画(Property Animation)(一),这一篇讲继续讲解Android的属性动画。

6、在XML中使用属性动画

属性动画同视图动画一样,也可以直接写在XML中,代码如下:

<?xml version="1.0" encoding="utf-8"?>  
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="1000"  
    android:propertyName="scaleX"  
    android:valueFrom="1.0"  
    android:valueTo="2.0"  
    android:valueType="floatType" >  
</objectAnimator>  
public void scaleX(View view)  
    {  
        // 加载动画  
        Animator anim = AnimatorInflater.loadAnimator(this, R.animator.scalex);  
        anim.setTarget(mMv);  
        anim.start();  
    }  

7、View的animate方法

在Android 3.0之后,Google给View增加了animate方法来直接驱动属性动画,代码如下:

        // need API12  
        view.animate()//  
                .alpha(0)//  
                .y(300)
                .setDuration(300)  
                // need API 12  
                .withStartAction(new Runnable()  
                {  
                    @Override  
                    public void run()  
                    {  
                        Log.e(TAG, "START");  
                    }  
                    // need API 16  
                }).withEndAction(new Runnable()  
                {  

                    @Override  
                    public void run()  
                    {  
                        Log.e(TAG, "END");  
                        runOnUiThread(new Runnable()  
                        {  
                            @Override  
                            public void run()  
                            {  

                            }  
                        });  
                    }  
                }).start(); 

简单的使用view.animate().alpha(0).y(300).setDuration(300).start()就能实现动画~~不过需要SDK11,此后在SDK12,SDK16又分别添加了withStartAction和withEndAction用于在动画前,和动画后执行一些操作。当然也可以.setListener(listener)等操作。

8、Interpolates(插值器)

通过插值器,可以定义动画的变换速率,这一点非常类似物理中的加速度,其作用主要是通过控制目标变量的变化值进行对应的变化。同样的一个动画变换起始值,在不同的插值器作用下,每个单位时间内所能达到的变化值也是不一样的。
我们将上一篇中的动画代码中加入插值器,看一下效果两张图的效果差别:
这里写图片描述
这里写图片描述
主要是加入代码:

set.setInterpolator(new BounceInterpolator());

这里就简单点贴上一个弹出的效果代码了:

private void startAnim() {
        ObjectAnimator animator0 = ObjectAnimator.ofFloat(
                mImageViews.get(0),
                "alpha",
                1F,
                0.5F);
        ObjectAnimator animator1 = ObjectAnimator.ofFloat(
                mImageViews.get(1),
                "translationY",
                200F);
        ObjectAnimator animator2 = ObjectAnimator.ofFloat(
                mImageViews.get(2),
                "translationX",
                200F);
        ObjectAnimator animator3 = ObjectAnimator.ofFloat(
                mImageViews.get(3),
                "translationY",
                -200F);
        ObjectAnimator animator4 = ObjectAnimator.ofFloat(
                mImageViews.get(4),
                "translationX",
                -200F);
        AnimatorSet set = new AnimatorSet();
        set.setDuration(500);
        //添加插值器
        set.setInterpolator(new BounceInterpolator());
        set.playTogether(
                animator0,
                animator1,
                animator2,
                animator3,
                animator4);
        set.start();
        mFlag = false;
    }

关于插值器一共有下面这几种:
1、AccelerateDecelerateInterpolator开始与结束的地方速率改变比较慢,在中间的时候加速
2、AccelerateInterpolator开始的地方速率改变比较慢,然后开始加速
3、AnticipateInterpolator开始的时候向后然后向前甩
4、AnticipateOvershootInterpolator开始的时候向后然后向前甩一定值后返回最后的值
5、BounceInterpolator动画结束的时候弹起
6、CycleInterpolator循环播放特定的次数,速率改变沿着正弦曲线
7、DecelerateInterpolator在开始的地方快然后慢
8、LinearInterpolator以常量速率改变
9、OvershootInterpolator向前甩一定值后再回到原来位置

下一篇将讲解android的布局动画

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值