回答:
clearAnimation()
どちらに電話してもView
よろしいですかstartAnimation()
。
setFillAfter()
とにかく、おそらくあなたが思っていることをしないでしょう。タッチイベントが発生したら、アニメーションをクリアしてから、レイアウトを調整して、求めている永続的な変更に影響を与えます。
Android 4.4.4では、ビューでアルファフェージングアニメーションを停止できる唯一の方法のように見えます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);
.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);