关于Android动画的监听,开始,结束的控制分别有 Animation 动画和 ObjectAnimator 动画

本文探讨了Android中Animation动画和ObjectAnimator动画的监听与控制,重点在于如何实现动画的开始和结束操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1》首先是Animation 动画监听,开始,结束的控制

private ImageView yun_left;
private Animation myAnimation_Translate_left,
      myAnimation_Translate_right;
2》
myAnimation_Translate_left = AnimationUtils.loadAnimation(this,
      R.anim.my_translate_action_left);
myAnimation_Translate_right = AnimationUtils.loadAnimation(this,
      R.anim.my_translate_action_right);

3》
myAnimation_Translate_left
      .setAnimationListener(new AnimationListener() {
         @Override
         public void onAnimationStart(Animation arg0) {
         }
         @Override
         public void onAnimationRepeat(Animation arg0) {
         }
         @Override
         public void onAnimationEnd(Animation arg0) {
            randomDuration();
            myAnimation_Translate_left.setDuration(number);
            yun_left.startAnimation(myAnimation_Translate_right);
         }
      });

myAnimation_Translate_right
      .setAnimationListener(new AnimationListener() {
         @Override
         public void onAnimationStart(Animation arg0) {
         }
         @Override
         public void onAnimationRepeat(Animation arg0) {
         }
         @Override
         public void onAnimationEnd(Animation arg0) {
            randomDuration();
            myAnimation_Translate_left.setDuration(number);
            yun_left.startAnimation(myAnimation_Translate_left);
         }
      });
yun_left.startAnimation(myAnimation_Translate_left);

4》定义xml布局
向右移动
my_translate_action_right 
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="100%"
android:fillAfter="false"/>
<!-- translate 位置转移动画效果
        整型值:
        fromXDelta 属性为动画起始时 X坐标上的位置    
        toXDelta   属性为动画结束时 X坐标上的位置
        
        fromYDelta 属性为动画起始时 Y坐标上的位置
        toYDelta   属性为动画结束时 Y坐标上的位置
        注意:
                     没有指定fromXType toXType fromYType toYType 时候,默认是以自己为相对参照物 
                   
        
        长整型值:
        duration  属性为动画持续时间
        说明:     
                     时间以毫秒为单位
-->
</set>

5》向左移动 
my_translate_action_left
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%"
android:toXDelta="0"
android:fillAfter="false"/>
<!-- translate 位置转移动画效果
        整型值:
        fromXDelta 属性为动画起始时 X坐标上的位置    
        toXDelta   属性为动画结束时 X坐标上的位置
        
        fromYDelta 属性为动画起始时 Y坐标上的位置
        toYDelta   属性为动画结束时 Y坐标上的位置
        注意:
                     没有指定fromXType toXType fromYType toYType 时候,默认是以自己为相对参照物 
                   
        
        长整型值:
        duration  属性为动画持续时间
        说明:     
                     时间以毫秒为单位
-->
</set>

2.接下来是ObjectAnimator动画实现贝塞尔曲线样式
1》创建对象
ObjectAnimator  animatorX,animatorY;

animatorX = ObjectAnimator.ofFloat(same_level, "X",0,600).setDuration(1000);
animatorY = ObjectAnimator.ofFloat(same_level, "Y",800,200).setDuration(1000);
//设置监听
animatorY.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {

    }

    @Override
    public void onAnimationEnd(Animator animation) {
        MyToast.showToast(SameCaseActy.this,im.getScaleX()+"");
    }

    @Override
    public void onAnimationCancel(Animator animation) {

    }

    @Override
    public void onAnimationRepeat(Animator animation) {

    }
});

//开始动画
same_level.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        animatorY.setInterpolator(new LinearInterpolator());
        animatorX.setInterpolator(new PathInterpolator(0.4f,0,0.2f,1));

        animatorX.start();
        animatorY.start();
    }
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WangRain1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值