安卓 java 窗帘带进度的开关动画,并且点击开之后,开动画没结束再点击关,若窗帘正在关闭,再次点击打开窗帘需要立即停止正在播放的关闭动画并开始播放窗帘开启动画。
时间: 2024-04-30 08:22:54 浏览: 172
android 窗帘动画
5星 · 资源好评率100%
实现这个功能可以使用属性动画和动画监听器。
首先,定义一个布尔变量isOpening来表示窗帘是否正在打开,定义一个属性动画animator来控制窗帘的开关动画。
当点击开关按钮时,判断isOpening的状态:
- 如果isOpening为false,说明窗帘处于关闭状态,需要播放开启动画。此时,先将animator取消掉,然后创建一个新的animator,并将窗帘的状态设置为正在打开。animator的动画监听器中,当动画结束时,将窗帘的状态设置为已经打开,并将animator置为null。
- 如果isOpening为true,说明窗帘处于打开状态,需要播放关闭动画。此时,先将animator取消掉,然后创建一个新的animator,并将窗帘的状态设置为正在关闭。animator的动画监听器中,当动画结束时,将窗帘的状态设置为已经关闭,并将animator置为null。
代码示例:
```java
private boolean isOpening = false;
private ValueAnimator animator;
public void toggleCurtain() {
if (!isOpening) {
if (animator != null) {
animator.cancel();
}
animator = ValueAnimator.ofFloat(0f, 1f);
animator.setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
// 更新窗帘的状态
curtain.setTranslationY(value * curtain.getHeight());
}
});
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
isOpening = true;
}
@Override
public void onAnimationEnd(Animator animation) {
isOpening = false;
animator = null;
}
@Override
public void onAnimationCancel(Animator animation) {
isOpening = false;
animator = null;
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
} else {
if (animator != null) {
animator.cancel();
}
animator = ValueAnimator.ofFloat(1f, 0f);
animator.setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
// 更新窗帘的状态
curtain.setTranslationY(value * curtain.getHeight());
}
});
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
isOpening = false;
}
@Override
public void onAnimationEnd(Animator animation) {
isOpening = true;
animator = null;
}
@Override
public void onAnimationCancel(Animator animation) {
isOpening = true;
animator = null;
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
}
}
```
阅读全文