2

ビューをスムーズに下または右にスクロールするために、単一の Animator インスタンスを使用しています。まず、カスタム ビューの実装内で共通のパラメーターを使用してセットアップします。

private ObjectAnimator animator = new ObjectAnimator();
{
    animator.setTarget(this);
    animator.setDuration(moveDuration);
}

次に、2つの方法を使用して上下に移動しています

public void moveRight() {

    if( animator.isRunning() ) animator.end();

    animator.setPropertyName("scrollX");
    animator.setIntValues(getScrollX(), getScrollX() + cellWidth);
    animator.start();
}

public void moveDown() {

    if( animator.isRunning() ) animator.end();

    animator.setPropertyName("scrollY");
    animator.setIntValues(getScrollY(), getScrollY() + cellHeight);
    animator.start();
}

最初に呼び出されたメソッドのみが正しく機能することがわかりました。最初に実行されたメソッドがアニメーターオブジェクト内にいくつかの痕跡を残したかのように、別のものは間違って動作します。

これらのトレースを削除し、アニメーターを右から下へ、またはその逆にスクロールするように再プログラムするにはどうすればよいですか?

4

2 に答える 2

1

私もこの問題を抱えていました。何らかの理由で、setPropertyName()を2回使用しても、以前のプロパティや値、あるいはその両方がクリアされていないようです。

代わりにsetProperty()を使用すると、これが修正されます。例:

Property<View, Float> mTranslationXProperty = Property.of(View.class, 
   Float.class, "translationX");
Property<View, Float> mScaleXProperty = Property.of(View.class, 
   Float.class, "scaleX");
...
animator.setProperty(mTranslationXProperty);
animator.setFloatValues(500f, 0f); 
animator.start();
...
animator.setProperty(mScaleXProperty);
animator.setFloatValues(1f, 0f); 
animator.start();
于 2012-12-10T10:34:21.237 に答える
0

以下のコードを使用して値をリセットできました。

final AnimatorSet animate = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.anim_move);
List<Animator> animations = animate.getChildAnimations();
for (int i = 0; i < animations.size(); i++) {
    ObjectAnimator animator = (ObjectAnimator) animations.get(i);
    if (animator.getPropertyName().contentEquals("y")) {
        animator.setFloatValues(0f, 500f);
    }
}
animate.setTarget(starlightImageView);
animate.start();
于 2013-07-25T09:15:47.530 に答える