web-dev-qa-db-ja.com

アニメーションを停止する方法(cancel()は機能しません)

実行中の翻訳アニメーションを停止する必要があります。 Animation.cancel()メソッドは効果がありません。とにかくアニメーションは最後まで続きます。

実行中のアニメーションをどのようにキャンセルしますか?

219
Mix

clearAnimation()を呼び出したViewstartAnimation()を呼び出します。

466
CommonsWare

Android 4.4.4では、ビューのアルファフェードアニメーションを停止できる唯一の方法は、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);
35
Sean Barbeau

アニメーションリスナーを使用している場合は、v.setAnimationListener(null)を設定します。すべてのオプションで次のコードを使用します。

v.getAnimation().cancel();
v.clearAnimation();
animation.setAnimationListener(null);
18
DjP

.clearAnimation();を使用する必要があります。 UIスレッドのメソッド:

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                    v.clearAnimation();
            }
        });
4
rz0

アニメーションを停止する前に、変換マトリックスをアニメーションから取得し、マトリックスの内容を調べて、探している位置の値を取得することができます。

ここにあなたが調べるべきAPIのものがあります

public boolean getTransformation (long currentTime, Transformation outTransformation)

public Matrix getMatrix ()

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];
3
Akos Cz

メソッド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)

0
saurabh dhillon

アニメーションを停止するには、何もしないようなobjectAnimatorを設定します。

最初に手動で反転すると、左から右にアニメーションが表示されます。

flipper.setInAnimation(leftIn);
flipper.setOutAnimation(rightOut);

自動フリップに切り替えるとアニメーションはありません

flipper.setInAnimation(doNothing);
flipper.setOutAnimation(doNothing);

doNothing = ObjectAnimator.ofFloat(flipper, "x", 0f, 0f).setDuration(flipperSwipingDuration);
0
Andrew Glukhoff