Answers:
打电话clearAnimation()
给View
你打电话的人startAnimation()
。
setFillAfter()
无论如何,可能不会按照您的想法去做。发生触摸事件时,请清除动画,然后调整布局以影响所需的任何永久更改。
在Android 4.4.4上,似乎可以停止View上的Alpha淡入淡出动画的唯一方法是调用View.animate().cancel()
(即,调用.cancel()
View的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);
.setListener(null);
这帮助了我。
如果您正在使用动画侦听器,请设置v.setAnimationListener(null)
。将以下代码与所有选项一起使用。
v.getAnimation().cancel();
v.clearAnimation();
animation.setAnimationListener(null);
v.setAnimation(null);
因为它将在中完成 v.clearAnimation();
。
您可以尝试做的是在停止动画之前从动画获取变换矩阵,并检查矩阵内容以获取所需的位置值。
这是您应该研究的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];
使用方法setAnimation(null)停止动画,该动画在View.java中作为公共方法
公开,它是所有用于创建交互式UI组件(按钮,文本字段等)的小部件的基类。
/**
* Sets the next animation to play for this view.
* If you want the animation to play immediately, use
* {@link #startAnimation(android.view.animation.Animation)} instead.
* This method provides allows fine-grained
* control over the start time and invalidation, but you
* must make sure that 1) the animation has a start time set, and
* 2) the view's parent (which controls animations on its children)
* will be invalidated when the animation is supposed to
* start.
*
* @param animation The next animation, or null.
*/
public void setAnimation(Animation animation)
要停止动画,您可以设置不执行任何操作的objectAnimator,例如
首先,当手动翻转时,动画从左到右:
flipper.setInAnimation(leftIn);
flipper.setOutAnimation(rightOut);
然后切换到自动翻转时没有动画
flipper.setInAnimation(doNothing);
flipper.setOutAnimation(doNothing);
doNothing = ObjectAnimator.ofFloat(flipper, "x", 0f, 0f).setDuration(flipperSwipingDuration);