Androidでプロパティアニメーションを使用してビューの高さを増やす方法
ObjectAnimator a = ObjectAnimator.ofFloat(viewToIncreaseHeight, "translationY", -100);
a.setInterpolator(new AccelerateDecelerateInterpolator());
a.setDuration(1000);
a.start();
平行移動Yは、高さを増やさずに実際にビューを移動します。ビューの高さを増やすにはどうすればよいですか?
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();
ViewPropertyAnimator を使用すると、コードを数行節約できます。
yourView.animate().scaleY(-100f).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(1000);
必要なのはこれだけです。ドキュメントと ViewPropertyAnimator の利用可能なすべてのメソッドを確認してください。
これは、この質問に対する直接的な答えではありません。しかし、それは誰かを助けるかもしれません。
時々、その子の一部が追加/削除されている(または単に表示/非表示になっている)ため、ビューの高さを増減したい場合があります。
これらの場合、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つの可視性を変更するときなど)のときに、ビューの高さ/幅をアニメーション化します。
だから、少なくとも試してみることをお勧めします。