web-dev-qa-db-ja.com

Androidプロパティアニメーション:ビューの高さを増やす方法

Androidでプロパティアニメーションを使用してビューの高さを増やす方法

ObjectAnimator a = ObjectAnimator.ofFloat(viewToIncreaseHeight, "translationY", -100);
a.setInterpolator(new AccelerateDecelerateInterpolator());
a.setDuration(1000);
a.start();

平行移動Yは、高さを増やさずに実際にビューを移動します。ビューの高さを増やすにはどうすればよいですか?

48
g.revolution
ValueAnimator anim = ValueAnimator.ofInt(viewToIncreaseHeight.getMeasuredHeight(), -100);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        int val = (Integer) valueAnimator.getAnimatedValue();
        ViewGroup.LayoutParams layoutParams = viewToIncreaseHeight.getLayoutParams();
        layoutParams.height = val;
        viewToIncreaseHeight.setLayoutParams(layoutParams);
    }
});
anim.setDuration(DURATION);
anim.start(); 
109
rajan ks

ViewPropertyAnimator を使用すると、コードを数行節約できます。

yourView.animate().scaleY(-100f).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(1000);

必要なのはこれだけです。ドキュメントと ViewPropertyAnimator の利用可能なすべてのメソッドを確認してください。

17
A Honey Bustard

これは、この質問に対する直接的な答えではありません。しかし、それは誰かを助けるかもしれません。

時々、その子の一部が追加/削除されている(または単に表示/非表示になっている)ため、ビューの高さを増減したい場合があります。

これらの場合、Androidデフォルトのアニメーションを実際に使用できます。他の回答で述べたように、次の方法で設定できます。

<LinearLayout
    ...
    Android:animateLayoutChanges="true"
.../>

またはJavaの場合:

linearLayout.setLayoutTransition(new LayoutTransition());

カスタムビューを作成した場合:

public StickerPickerView(final Context context, final AttributeSet attrs,
        final int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    setLayoutTransition(new LayoutTransition());
}

私にとっては、かなり満足のいくものでしたが、最新のAPIでテストしました。ビューが表示されると、自動的にフェードイン/フェードアウトが追加されます。また、同じ変更(子ビューの1つの可視性を変更するときなど)のときに、ビューの高さ/幅をアニメーション化します。

だから、少なくとも試してみることをお勧めします。

1
W0rmH0le