我需要停止一个运行翻译动画。Animation的.cancel()方法没有效果;不管怎样,动画会一直播放到最后。
如何取消正在运行的动画?
我需要停止一个运行翻译动画。Animation的.cancel()方法没有效果;不管怎样,动画会一直播放到最后。
如何取消正在运行的动画?
当前回答
你必须使用.clearAnimation();方法:
runOnUiThread(new Runnable() {
@Override
public void run() {
v.clearAnimation();
}
});
其他回答
你可以尝试做的是在停止动画之前从动画中获取变换矩阵,并检查矩阵内容以获得你正在寻找的位置值。
下面是您应该研究的api
gettransform (long currentTime, transform outTransformation)
getMatrix ()
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];
如果你正在使用动画监听器,设置v.setAnimationListener(null)。对所有选项使用下面的代码。
v.getAnimation().cancel();
v.clearAnimation();
animation.setAnimationListener(null);
首先,移除所有与animatior或animator set相关的监听器。然后取消动画器或动画器集。
inwardAnimationSet.removeAllListeners()
inwardAnimationSet.cancel()
在Android 4.4.4,似乎唯一的方法我可以停止一个alpha淡出动画的视图是调用View.animate().cancel()(即,调用.cancel()在视图的ViewPropertyAnimator)。
以下是我在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);