android 动画

帧动画
补间动画
属性动画

帧动画 依赖于资源文件

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@drawable/gif1"
        android:duration="100"/>
    <item
        android:drawable="@drawable/gif2"
        android:duration="100"/>
    <item
        android:drawable="@drawable/gif3"
        android:duration="100"/>
</animation-list>

其中 oneshot=false 表示一直循环
item下的 duration=100 是本张图片显示时长

 ImageView iv = findViewById(R.id.iv);
 iv.setImageResource(R.drawable.gif_list);
 AnimationDrawable animationDrawable = (AnimationDrawable) iv.getDrawable();
 animationDrawable.start();

补间动画
需要在res下新建anim文件夹,在建立动画资源文件,否则找不到补间动画的标签
补间动画只是视觉改变了控件的位置,其控件的本身位置不发生改变的.
渐变alpha
500毫秒从不透明到完全透明

<!-- fromAlpha和toAlpha是起始透明度和结束时透明度 -->
<!--startOffset 动画延迟的时间,多久后开始执行动画效果,int型,毫秒为单位。-->
<!--duration 动画的时长,int类型,以毫秒为单位,默认为300毫秒。-->
<alpha
    android:fromAlpha="1.0"
    android:toAlpha="0.0"
    android:startOffset="800"
    android:duration="500"/>

旋转rotate
800毫秒以中心点正向旋转540度

    <!--fromDegrees:开始的角度
       toDegrees:结束的角度,+表示是正的
       pivotX:用于设置旋转时的x轴坐标
       pivotY:用于设置旋转时的y轴坐标
       pivotyX和pivotyY为纯数字时表示使用绝对位置定位
          为百分之多少时表示使用相对于控件本身定位
          百分之P结尾时表示使用相对于控件的父控件定位
     -->
    <rotate
        android:fromDegrees="0"
        android:toDegrees="540"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="800"/>

缩放scale
800毫秒XY分别向中心点缩放一半

    <scale
        android:duration="800"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.5"
        android:toYScale="0.5" />

位移translate
2秒时间向右平移百分之百

    <translate
        android:duration="2000"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="100%"
        android:toYDelta="0%" />

最后用这个AnimationUtils工具类得到我们的动画,设置给控件

 ImageView iv2 = findViewById(R.id.iv2);
 Animation animation2 = AnimationUtils.loadAnimation(Fab2Activity.this, R.anim.anims);
 iv2.setAnimation(animation2);

属性动画
属性动画作用于对象,控制对象的属性展示出动画.所以补间动画能实现的属性动画也可以实现.
同时属性动画真实改变了view的位置.

        final Button b = findViewById(R.id.b);
        ValueAnimator valueAnimator = ValueAnimator.ofInt(500,200);
        valueAnimator.setDuration(1000);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int animatedValue = (int) animation.getAnimatedValue();
                Log.d("////",animatedValue + "");
                b.getLayoutParams().width = animatedValue;
                b.requestLayout();
            }
        });
        valueAnimator.start();

我们通过ValueAnimator.ofInt(500,200)得到valueAnimator;并且增加UpdateListener监听得到每次回调得到数值并给对象属性赋值,通过Log可以看出来 这个ValueAnimator是操作数值的一个东西,每次回调的数值间隙与设置的setDuration(1000)有关
这里写图片描述 这里写图片描述

        final Button b = findViewById(R.id.b);
        ValueAnimator valueAnimator1 = ValueAnimator.ofFloat(1.0f,200.0f,0.0f);
        valueAnimator1.setDuration(1000);
        valueAnimator1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Float animatedValue = (Float) animation.getAnimatedValue();
                Log.d("/////",animatedValue + "");
                b.setX(animatedValue);
            }
        });
        valueAnimator1.start();

ValueAnimator.ofFloat和ofInt 只有值的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值