属性动画ObjectAnimator

属性动画: 1.在XML中定义属性动画 1.1在res文件下,创建一个animator文件 1.2在这个文件下,创建XML文件,注意根节点是ObjectAnimator 1.3AnimatorInflater把XML文件变成一个控件对象 1.4把要做动画的控件设置给控件对象 1.5执行动画
在 MainActivity 2.在JAVA代码中实现属性动画 2.1创建属性动画对象,指定动画的类型,参数 2.2指定动画的时长 2.3指定动画播放的形式 2.4指定动画再次播放的次数 2.5开启动画 ObjectAnimator alpha = ObjectAnimator.ofFloat(img_tu,"alpha",new float[]{0.0f,0.2f,0.5f,0.8f,1.0f}); alpha.setDuration(2000)//定义动画执行的时长 alpha.setRepeatMode(ObjectAnimator.RESTART); //设置动画执行的模式 alpha.setRepeatCount(); //设置动画执行的次数 alpha.start(); //开启动画 3.集合动画 3.1创建动画集合对象 AnimatorSet

package com.example.shuxingdongh_demo;
import android.animation.Animator; import android.animation.AnimatorInflater; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_tm ; private Button btn_sf ; private Button btn_xz ; private Button btn_wy ; private Button btn_zuh ; private ImageView img_tu ; private Button btn_bj ;
@Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //初始化
//这里用的是XML的形式,引用XML里的属性动画 Animator Xmlanimator = AnimatorInflater. loadAnimator ( this ,R.animator.donghua); //把控件对象放到属性动画当中 Xmlanimator.setTarget( img_tu ); //开启动画 Xmlanimator.start(); }
private void initView() { btn_tm = findViewById(R.id.btn_tm); btn_sf = findViewById(R.id.btn_sf); btn_xz = findViewById(R.id.btn_xz); btn_wy = findViewById(R.id.btn_wy); btn_zuh = findViewById(R.id.btn_zuh); img_tu = findViewById(R.id.img_tu);
//补间动画 btn_bj = findViewById(R.id.btn_bj);
//添加事件 btn_tm .setOnClickListener( this ); btn_sf .setOnClickListener( this ); btn_xz .setOnClickListener( this ); btn_wy .setOnClickListener( this ); btn_zuh .setOnClickListener( this );
btn_bj .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { TranslateAnimation translate = new TranslateAnimation(Animation. RELATIVE_TO_PARENT , 0.1f , Animation. RELATIVE_TO_PARENT , 0.5f , Animation. RELATIVE_TO_PARENT , 0.1f , Animation. RELATIVE_TO_PARENT , 0.5f ); //设置执行时间 translate.setDuration( 3000 ); //设置执行的控件 img_tu .startAnimation(translate); } }); img_tu .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { Toast. makeText (MainActivity. this , "你点击了图片" , Toast. LENGTH_SHORT ).show(); } }); }
//添加点击事件 @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_tm: //透明度 ObjectAnimator alpha = ObjectAnimator. ofFloat ( img_tu , "alpha" , new float []{ 0.1f , 0.3f , 0.5f , 0.8f , 1.0f }); alpha.setDuration( 3000 ); //设置动画执行的时长 alpha.setRepeatMode(ObjectAnimator. RESTART ); //设置动画执行的模式 alpha.setRepeatCount( 1 ); //设置动画执行的次数 alpha.start(); //开启动画 break ; case R.id.btn_sf: //缩放 ObjectAnimator scaleX = ObjectAnimator. ofFloat ( img_tu , "scaleX" , new float []{ 0f , 0.5f , 1f }); scaleX.setDuration( 3000 ); //设置动画执行的时长 scaleX.setRepeatMode(ObjectAnimator. RESTART ); //设置动画执行的模式 scaleX.setRepeatCount( 1 ); //设置动画执行的次数 scaleX.start(); //开启动画 break ; case R.id.btn_xz: //旋转 ObjectAnimator rotation = ObjectAnimator. ofFloat ( img_tu , "rotation" , new float []{ 90f , 180f , 270f , 360f }); rotation.setDuration( 3000 ); //设置动画执行的时长 rotation.setRepeatMode(ObjectAnimator. RESTART ); //设置动画执行的模式 rotation.setRepeatCount( 1 ); //设置动画执行的次数 rotation.start(); //开启动画 break ; case R.id.btn_wy: //位移 ObjectAnimator translationY = ObjectAnimator. ofFloat ( img_tu , "translationY" , new float []{ 10f , 20f , 30f , 40f }); translationY.setDuration( 3000 ); //设置动画执行的时长 translationY.setRepeatMode(ObjectAnimator. RESTART ); //设置动画执行的模式 translationY.setRepeatCount( 1 ); //设置动画执行的次数 translationY.start(); //开启动画 break ; case R.id.btn_zuh: //组合 AnimatorSet animatorSet = new AnimatorSet(); ObjectAnimator rotation1 = ObjectAnimator. ofFloat ( img_tu , "rotation" , new float []{ 90f , 180f , 270f , 360f }); rotation1.setDuration( 3000 ); //设置动画执行的时长 ObjectAnimator translationX = ObjectAnimator. ofFloat ( img_tu , "translationX" , new float []{ 0f , 20f , 40f , 60f , 80f }); translationX.setDuration( 3000 ); //设置动画执行的时长 animatorSet.playTogether(rotation1,translationX); animatorSet.start(); break ; } } }

    推荐阅读