使用YoYo动画库
首先在Gradle里面引入YoYo
implementation ("com.daimajia.androidanimations:library:2.4@aar")
设置动画类型,时间,循环
import com.daimajia.androidanimations.library.Techniques;
import com.daimajia.androidanimations.library.YoYo;
public void openwan() {
YoYo.with(Techniques.RollOut)
.duration(700) //设置执行时间
.repeat(0) //设置重复次数
.onEnd(animator -> {
// 在动画结束时执行的操作
})
.playOn(binding.wan); // 使用YoYo库执行RollOut动画
}
自定义动画-平移动画
/**
* 开盖动画
*
* @param gameInsanity 动画目标视图
* @param init 是否为初始化状态
*/
public void animateGameInsanity(View gameInsanity, boolean init) {
AnimatorSet animatorSet = createAnimatorSet(gameInsanity, -210f, 300f, 4f, 3.6f, 700);
// 添加动画监听器
animatorSet.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) {
//动画重复时执行
}
});
animatorSet.start(); // 启动动画
}
自定义动画-平移缩放动画
/**
* 创建一个AnimatorSet,用于组合多个动画
*
* @param view 目标视图
* @param translationX X轴平移
* @param translationY Y轴平移
* @param scaleX X轴缩放
* @param scaleY Y轴缩放
* @param duration 动画持续时间
* @return AnimatorSet 对象
*/
private AnimatorSet createAnimatorSet(View view, float translationX, float translationY, float scaleX, float scaleY, int duration) {
ObjectAnimator moveX = ObjectAnimator.ofFloat(view, "translationX", translationX);
ObjectAnimator moveY = ObjectAnimator.ofFloat(view, "translationY", translationY);
ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(view, "scaleX", scaleX);
ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(view, "scaleY", scaleY);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(moveX, moveY, scaleXAnim, scaleYAnim); // 同时播放所有动画
animatorSet.setDuration(duration); // 设置动画持续时间
animatorSet.setInterpolator(new DecelerateInterpolator()); // 设置插值器
return animatorSet;
}