悲伤的橙子 · 风灵刻痕6拼装过程-西瓜视频· 3 月前 · |
行走的扁豆 · Git commit ID之日常使用总结-琼杰笔记· 7 月前 · |
纯真的足球 · 为什么有这么多人花钱去玩皮卡堂这个游戏? - 知乎· 1 年前 · |
没有腹肌的海豚 · print stack trace ...· 1 年前 · |
我需要停止正在运行的翻译动画。
Animation
的
.cancel()
方法没有任何效果;动画无论如何都会一直播放到最后。
如何取消正在运行的动画?
您可以尝试做的是在停止动画之前从动画中获取转换矩阵,并检查Matrix内容以获得您正在寻找的位置值。
下面是您应该研究的api
public boolean getTransformation (long currentTime, Transformation outTransformation)
public void getValues (float[] values)
例如(一些伪代码。我没有测试过这个):
Transformation outTransformation = new Transformation();
myAnimation.getTransformation(currentTime, outTransformation);
Matrix transformationMatrix = outTransformation.getMatrix();
float[] matrixValues = new float[9];
transformationMatrix.getValues(matrixValues);
float transX = matrixValues[Matrix.MTRANS_X];
float transY = matrixValues[Matrix.MTRANS_Y];
在安卓4.4.4上,似乎唯一可以停止视图上的alpha淡出动画的方法是调用
View.animate().cancel()
(即,在视图的
ViewPropertyAnimator
上调用
.cancel()
)。
下面是我用来在ICS前后兼容的代码:
public void stopAnimation(View v) {
v.clearAnimation();
if (canCancelAnimation()) {
v.animate().cancel();
}
..。使用该方法:
/**
* Returns true if the API level supports canceling existing animations via the
* ViewPropertyAnimator, and false if it does not
* @return true if the API level supports canceling existing animations via the
* ViewPropertyAnimator, and false if it does not
public static boolean canCancelAnimation() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}
下面是我要停止的动画:
v.setAlpha(0f);
v.setVisibility(View.VISIBLE);
// Animate the content view to 100% opacity, and clear any animation listener set on the view.
v.animate()
.alpha(1f)
.setDuration(animationDuration)
.setListener(null);
要停止动画,您可以设置不执行任何操作的objectAnimator,例如
首先,当手动翻转时,有从左到右的动画:
flipper.setInAnimation(leftIn);
flipper.setOutAnimation(rightOut);
然后,当切换到自动翻转时,没有动画
flipper.setInAnimation(doNothing);
flipper.setOutAnimation(doNothing);
doNothing = ObjectAnimator.ofFloat(flipper, "x", 0f, 0f).setDuration(flipperSwipingDuration);
在经历了所有的事情之后,什么都没有起作用。因为我在视图中应用了多个动画。下面是为我工作的代码。启动连续淡入和淡出的动画
val mAnimationSet = AnimatorSet()
private fun performFadeAnimation() {
val fadeOut: ObjectAnimator = ObjectAnimator.ofFloat(clScanPage, "alpha", 1f, 0f)
fadeOut.duration = 1000
val fadeIn: ObjectAnimator = ObjectAnimator.ofFloat(clScanPage, "alpha", 0f, 1f)
fadeIn.duration = 1000
mAnimationSet.play(fadeIn).after(fadeOut)
mAnimationSet.addListener(animationListener)
mAnimationSet.start()
}
不断循环的动画侦听器
private val animationListener=object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
super.onAnimationEnd(animation)
mAnimationSet.start()
}
停止循环中进行的动画。我做了以下工作。
private fun stopAnimation() {
mAnimationSet.removeAllListeners()
}
由于没有其他答案提到这一点,你可以使用
ValueAnimator
的
cancel()
很容易地停止动画。
ValueAnimator
在制作动画方面非常强大。以下是使用
ValueAnimator
创建翻译动画的示例代码
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 5f);
int mDuration = 5000; //in millis
valueAnimator.setDuration(mDuration);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
悲伤的橙子 · 风灵刻痕6拼装过程-西瓜视频 3 月前 |
行走的扁豆 · Git commit ID之日常使用总结-琼杰笔记 7 月前 |
纯真的足球 · 为什么有这么多人花钱去玩皮卡堂这个游戏? - 知乎 1 年前 |