属性动画(基础)

其中包含平移,图片旋转,改变事件等

一、自定义一个类进行属性动画配置并在main布局中引用+组合动画

package com.gj.animator;

import android.animation.ObjectAnimator;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;

public class MusicButton extends AppCompatImageView implements View.OnClickListener {


private ObjectAnimator objectAnimator;
public static final int STATE_PLAYING =1;//正在播放
public static final int STATE_PAUSE =2;//暂停
public int state;

public MusicButton(Context context) {
    super(context);
    init();
}

public MusicButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MusicButton(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

private void init() {
    //第一个参数:Object对象

    //第二个参数:属性:旋转:rotation;平移:translationX/translationY
    //缩放:scaleX/scaleY;透明:alpha

    //第三个参数:起始值
    //第四个参数:结束值
    objectAnimator = ObjectAnimator.ofFloat(
            this,"rotation",0,360);
    //持续1秒
    objectAnimator.setDuration(1000);
    //设置重复次数无限次  ObjectAnimator.INFINITE
    objectAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    //设置为匀速  setInterpolator
    objectAnimator.setInterpolator(new LinearInterpolator());

    //设置动画开始
    objectAnimator.start();
    state = STATE_PLAYING;
    //设置点击事件
    setOnClickListener(this);

}


@Override
public void onClick(View v) {
    if(state==STATE_PAUSE){
        //动画重新开始
        objectAnimator.resume();
        state = STATE_PLAYING;
    }else{
        objectAnimator.pause();//动画暂停
        state = STATE_PAUSE;
    }
}

}

二、Main层(button的倒计时 组合动画)

package com.gj.animator;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AnimationSet;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

private ImageView goodsImage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Button button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //设置从0到10  数字value的动画  int类型
           ValueAnimator valueAnimator = ValueAnimator.ofInt(60,0);
           //设置持续时间
            valueAnimator.setDuration(60*1000);
            //设置数字匀速
            valueAnimator.setInterpolator(new LinearInterpolator());

            //监听每次改变时的值  只有一个监听器addUpdateListener
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    //获取值
                    int value = (Integer) animation.getAnimatedValue();
                    //赋值
                    button.setText(value+"");
                }
            });
            //开始动画
            valueAnimator.start();
        }
    });

    goodsImage = findViewById(R.id.goods_image);
    goodsImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //设置动画 第一个参数本控件(平移)
            ObjectAnimator translationX = ObjectAnimator.ofFloat(goodsImage,
                    "translationX", 0, 300f);
            ObjectAnimator translationY = ObjectAnimator.ofFloat(goodsImage,
                    "translationY", 0, 500f);
            //设置旋转
            ObjectAnimator rotation = ObjectAnimator.ofFloat(goodsImage,
                    "rotation", 0, 360);

            //设置组合动画
            AnimatorSet animatorSet = new AnimatorSet();
            //总的意思呢就是在执行平移Y动画之前执行平移X+旋转
            animatorSet.play(translationX).with(rotation).before(translationY);
            //设置动画 同时实现
           // animatorSet.playTogether(translationX,translationY,rotation);

            animatorSet.setDuration(3000);//设置动画时间
            animatorSet.start();//启动


        }
    });
}

}

三、布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

<com.gj.animator.MusicButton
    android:id="@+id/musicButton"
    android:layout_width="80dp"
    android:layout_height="80dp"
    app:srcCompat="@drawable/music"/>

<Button
    android:id="@+id/button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Button"/>

<ImageView
    android:id="@+id/goods_image"
    android:layout_width="30dp"
    android:layout_height="30dp"
    app:srcCompat="@mipmap/ic_launcher_round"/>

猜你喜欢

转载自blog.csdn.net/weixin_43603817/article/details/84961177