2013-08-22 3 views
9

ビューのパディングの変更をアニメーション化したいと思います。翻訳アニメーションの静止場所は、適用したいパディングと同じです。ビューのパディングの変更をどのようにアニメーション化しますか?

TranslateAnimation moveleft = new TranslateAnimation(Animation.ABSOLUTE, 0.0f, 
        Animation.ABSOLUTE, PADDING, Animation.ABSOLUTE, 
        0.0f, Animation.ABSOLUTE, 0.0f); 

moveLeft.setDuration(500); 
moveLeft.setFillAfter(true); 

これでビューのアニメーションが開始され、パディングが設定されます。これは、グラフィカルなグリッチを引き起こすため、正確には機能しません。

v.startAnimation(moveleft); 
v.setPadding(PADDING, 0, 0,0); 

答えて

3

すぐにパディングを設定する代わりに、アニメーションが完了した後にパディングを設定するアニメーションリスナーを試してみませんか?

v.setAnimationListener(new Animation.AnimationListener() { 
    ... 
    @Override 
    public void onAnimationEnd(){ 
     v.setPadding(PADDING, 0, 0,0); 
    } 
    ... 
}); 
v.startAnimation(moveleft); 
+0

私は以前この実装を試みましたが、それでも同様のグラフィックグリッジが発生しました。しかし、私はそれを修正する方法を見つけた。私はパディングを設定する前にアニメーションビューで '.clearAnimation()'を呼び出しました。アニメーションが終了した後で '.onAnimationEnd()'のコードが実行されたと仮定しました。それは事実ではないようです。 –

+0

さらに、 '.setFillAfter()'を削除しました。 –

34

その本当にシンプルで

は、我々は左、上下のパディングとしてそれぞれ_6dp、_6dpと0どこ_20dpする右のパディングを変更する必要が 、と言うのunclutter使用ValueAnimator、。

ofInt()は、varagrsタイプです。私たちはアニメーション化する必要がある値は、です。KeyValueペア(引数1 =現在値、ARG2 =目標値、............)として渡している

ここで行く、

ValueAnimator animator = ValueAnimator.ofInt(view.getPaddingRight(), _20dp); 
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator){ 
     view.setPadding(_6dp, _6dp, (Integer) valueAnimator.getAnimatedValue(), 0); 
    } 
}); 
animator.setDuration(200); 
animator.start(); 
+2

非常に良い解決策+1 –

関連する問題