Android 属性动画

本来想先放实现效果,后来手机实在捉急,只能后续再补啦。
一 实现透明效果:

//属性动画变透明
    private void alphaAnim(){
        //不透明--->透明--->不透明 2s钟时间平均分配
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f,1f);
        //从不透明变成透明
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f);
        //只执行一次动画时,可以省略1f
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",0f);
        objectAnimator.setDuration(2000);  //设置动画时间为2000ms
        objectAnimator.start();
    }

1f为完全不透明   0f为完全透明

二:实现旋转效果

//属性动画 旋转
    private void rotationAnim(){
        //0-->360 顺时针 360-->0 逆时针
        //下个度数大于上个度数,顺时针旋转;下个度数小于上个度数,逆时针旋转。
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"rotation",0f,360,0);
        objectAnimator.setDuration(5000);
        objectAnimator.start();
    }

三 实现平移效果:

//平移
    private void translationAnim(){
        // translationX 沿着x轴移动 上个数大于下个数,左移。反之右移
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationX",0f,-300f,0f);  //左移-->右移
        // translationX 沿着x轴移动 上个数大于下个数,上移。反之下移
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationY",0f,300f,0f);  //下移-->上移
        objectAnimator.setDuration(5000);
        objectAnimator.start();
    }

四 实现缩放效果

//缩放
    private void scaleAnim(){
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"scaleX",1f,2f,1f); //沿着x轴放大两倍再返回
        ObjectAnimator objectAnimator1=ObjectAnimator.ofFloat(imageView,"scaleY",1f,2f,1f); //沿着Y轴放大两倍再返回
        objectAnimator.setDuration(5000);
        objectAnimator1.setDuration(5000);
        objectAnimator.start();
        objectAnimator1.start();
    }

五 组合动画
以上都是基本动画,如果只有基本动画,显然是不够的,所以还有个类AnimatorSet,专门来组合这些动画。
AnimatorSet:这个类提供了一个play()方法,调用后将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:

after(Animator anim) :将现有动画插入到传入的动画之后执行
after(long delay) :将现有动画延迟指定毫秒后执行
before(Animator anim): 将现有动画插入到传入的动画之前执行
with(Animator anim) :将现有动画和传入的动画同时执行

//组合动画
    private void setAnim(){
        //沿x轴放大
        ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 2f, 1f);
        //沿y轴放大
        ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 2f, 1f);
        //移动
        ObjectAnimator translationXAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 0f, 200f, 0f);
        //透明动画
        ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
        AnimatorSet animatorSet=new AnimatorSet();
        //同时沿X,Y轴放大,且改变透明度,然后移动
        //在3s内,沿x、y轴同时放大,然后缩小,在缩放的同时还要改变透明度。然后再完成3s的左右移动。
        animatorSet.play(scaleXAnimator).with(scaleYAnimator).with(alphaAnimator).before(translationXAnimator);
        //每个动画都设置成3s,也可以分别设置
        animatorSet.setDuration(3000);
        animatorSet.start();
    }

六 在xml中实现动画效果
1.透明:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="alpha"
    android:repeatCount="-1"
    android:repeatMode="reverse"
    android:valueFrom="0.5"
    android:valueTo="1"
    android:valueType="floatType">
    <!--
    android:duration:动画持续时间;
    android:propertyName:动画类型;
    android:repeatCount:重复次数,-1为一直重复;
    android:repeatMode:重复模式:reverse(从结束的位置继续), restart(从新开始);
    android:valueFrom:起始值;
    android:valueTo:结束值。
    android:valueType:值类型
    -->

</objectAnimator>

在布局中的实现:

//alpha.xml对应的代码实现
    private void alphaXml(){
        Animator animator= AnimatorInflater.loadAnimator(this,R.animator.alpha);
        animator.setTarget(imageView);
        animator.start();
    }

2.旋转

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:valueFrom="0"
    android:valueTo="360"
    android:duration="2000"
    android:propertyName="rotation"
    android:valueType="floatType"/>

3.移动

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="translationX"
    android:repeatCount="-1"
    android:repeatMode="reverse"
    android:valueFrom="0"
    android:valueTo="200" 
    android:valueType="floatType"/>

4.缩放:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="scaleX"
    android:valueFrom="1"
    android:valueTo="1.5"
    android:valueType="floatType" />

5.组合:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <set>
        <objectAnimator
            android:duration="4000"
            android:propertyName="rotation"
            android:repeatMode="reverse"
            android:valueFrom="0"
            android:valueTo="360" />
        <set android:ordering="sequentially">
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="0"
                android:valueTo="200" />
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="200"
                android:valueTo="0" />
        </set>
    </set>
    <set >
        <objectAnimator
            android:duration="4000"
            android:propertyName="rotation"
            android:repeatMode="reverse"
            android:valueFrom="0"
            android:valueTo="360" />
        <set android:ordering="sequentially">
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="0"
                android:valueTo="-200" />
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="-200"
                android:valueTo="0" />
        </set>
    </set>
</set>
这里需要说下set中的属性android:ordering:规定了这个set中的动画的执行顺序,包括:
together(默认):set中的动画同时执行
sequentially:set中的动画按顺序执行

好啦,属性动画的需求,这些基本就满足啦,嘿嘿。
参考博客:https://www.jianshu.com/p/d23f58f4368d

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值