Android动画

补间动画

xml文件
透明

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1"
    android:duration="2000"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toAlpha="0.1">
</alpha>

旋转

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:interpolator="@android:anim/bounce_interpolator"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50"
    android:pivotY="50"
    >

</rotate>

缩放

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:interpolator="@android:anim/bounce_interpolator"
    android:fromXScale="1"
    android:toXScale="0.5"
    android:fromYScale="1"
    android:toYScale="1.5"
    android:pivotY="50"
    android:pivotX="50"
    >

</scale>

平移

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:interpolator="@android:anim/bounce_interpolator"
    android:fromYDelta="0"
    android:toYDelta="300"
    android:fromXDelta="0"
    android:toXDelta="300"
    >

</translate>

activity中代码

package com.fenghongzhang.anim.tween;

import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.fenghongzhang.anim.R;

public class TweenActivity extends AppCompatActivity {

    private Button btn;
    private Button btn1;
    private Button btn2;
    private Button btn3;
    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tween);
        initView();
    }

    public void btn(View view) {
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);
        img.startAnimation(animation);
    }

    public void btn1(View view) {
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
        img.startAnimation(animation);
    }

    public void btn2(View view) {
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
        img.startAnimation(animation);
    }

    public void btn3(View view) {
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate);
        img.startAnimation(animation);
    }

    private void initView() {
        btn = (Button) findViewById(R.id.btn);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        img = (ImageView) findViewById(R.id.img);
    }
}

帧动画

xml文件
先放入找好的图片

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/anim1" android:duration="200"></item>
    <item android:drawable="@drawable/anim2" android:duration="200"></item>
    <item android:drawable="@drawable/anim3" android:duration="200"></item>
    <item android:drawable="@drawable/anim4" android:duration="200"></item>
    <item android:drawable="@drawable/anim5" android:duration="200"></item>
    <item android:drawable="@drawable/anim6" android:duration="200"></item>
    <item android:drawable="@drawable/anim7" android:duration="200"></item>
    <item android:drawable="@drawable/anim8" android:duration="200"></item>
    <item android:drawable="@drawable/anim9" android:duration="200"></item>
    <item android:drawable="@drawable/anim10" android:duration="200"></item>
    <item android:drawable="@drawable/anim11" android:duration="200"></item>
    <item android:drawable="@drawable/anim12" android:duration="200"></item>
</animation-list>

activity代码

package com.example.day05;

import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

public class Main2Activity extends AppCompatActivity {


    private Button bnt;
    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initView();
        bnt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                img.setImageResource(R.drawable.kawayi);
                AnimationDrawable drawable = (AnimationDrawable) img.getDrawable();
                drawable.start();
            }
        });
    }


    private void initView() {
        bnt = (Button) findViewById(R.id.bnt);
        img = (ImageView) findViewById(R.id.img);
    }
}

属性动画

ValueAnimator

java代码

package com.fenghongzhang.anim;

import android.animation.ValueAnimator;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class Main2Activity extends AppCompatActivity {

    private static final String TAG = "Main2Activity";
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initView();
    }

    public void btn(View view) {
        ValueAnimator valueAnimator = ValueAnimator.ofInt(btn.getLayoutParams().width, 500);
        //动画时间
        valueAnimator.setDuration(2000);
        //重复次数
        valueAnimator.setRepeatCount(3);
        //重复方向,
        valueAnimator.setRepeatMode(ValueAnimator.REVERSE);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                //改变的值
                Integer animatedValue = (Integer) animation.getAnimatedValue();
                Log.i(TAG, "onAnimationUpdate: "+animatedValue);

                btn.getLayoutParams().width = animatedValue;
                btn.requestLayout();
            }
        });

        valueAnimator.start();
    }

    private void initView() {
        btn = (Button) findViewById(R.id.btn);
    }
}


xml文件

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:repeatCount="1"
    android:repeatMode="reverse"

    android:propertyName="translationX"
    android:valueFrom="100"
    android:valueTo="400"

    android:interpolator="@android:anim/accelerate_interpolator"
    android:valueType="floatType" />

<!--android:valueFrom="0"   // 初始值
    android:valueTo="100"  // 结束值
    android:valueType="intType" // 变化值类型 :floatType & intType

//重要
 android:propertyName="rotation" alpha scaleX或者scaleY  translationX 变化的方式. 透明,旋转.移动

    android:duration="3000" // 动画持续时间(ms),必须设置,动画才有效果
    android:startOffset ="1000" // 动画延迟开始时间(ms)
    android:fillBefore =true// 动画播放完后,视图是否会停留在动画开始的状态,默认为true
    android:fillAfter =false// 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
    android:fillEnabled=true// 是否应用fillBefore值,对fillAfter值无影响,默认为true
    android:repeatMode= “restart” // 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart|
    android:repeatCount =0// 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复
    android:interpolator = @[package:]anim/interpolator_resource // 插值器,即影响动画的播放速度,下面会详细讲
-->

java代码

   public void btn1(View view) {
        Animator animator = AnimatorInflater.loadAnimator(this, R.animator.bianhua);
        animator.setTarget(btn1);
        animator.start();
    }

使用 ObjectAnimator 实现四种动画

alpha
scaleX/scaleY
translateX/translateY
rotation

java 代码

public void btn2(View view) {
//        final ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "alpha", 0, 1);
//        ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "translationX", 0, 200);
//        ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "translationY", 0, 200, 100);
//        ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "scaleX", 1, 5);
//        ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "scaleY", 1, 5);
//        ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "rotation", 0, 270);
        ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "rotationY", 0, 180, -100);

        animator.setDuration(2000);
        animator.setRepeatCount(2);
        animator.setInterpolator(new AccelerateInterpolator());
//        animator.setInterpolator(new DecelerateInterpolator());
        animator.setRepeatMode(ValueAnimator.RESTART);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

            }
        });
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                
            }

            @Override
            public void onAnimationEnd(Animator animation) {

            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        animator.start();
    }

AnimationSet 动画集合

  AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.setDuration(3000);
        animatorSet.setInterpolator(new LinearInterpolator());

        ObjectAnimator translationX = ObjectAnimator.ofFloat(btn, "translationX", 0, 300);
        ObjectAnimator rotation = ObjectAnimator.ofFloat(btn, "rotation", 0, 720);
        ObjectAnimator scaleX = ObjectAnimator.ofFloat(btn, "scaleX", 1, 5);
        ObjectAnimator scaleY = ObjectAnimator.ofFloat(btn, "scaleY", 1, 5);
        ObjectAnimator alpha = ObjectAnimator.ofFloat(btn, "alpha", 1, 0);

        //顺序播放
        animatorSet.playSequentially(translationX, rotation, scaleX, scaleY, alpha);
        //同时执行
//        animatorSet.playTogether(scaleX, scaleY);
        animatorSet.start();

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值