属性动画ObjectAnimator

本文介绍了如何在Android中使用属性动画ObjectAnimator,包括在XML中定义和在Java代码中实现。通过示例展示了如何设置动画时长、重复模式、重复次数,并给出了透明度、缩放、旋转和位移动画的实现,以及如何组合多个动画。
摘要由CSDN通过智能技术生成
属性动画:
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 ;
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值