私のアプリには、レイアウトの高さが0のLinearLayoutがあります。ボタンをクリックすると、このレイアウトの高さはLayoutParams.WRAP_CONTENTになります。これは私がonclicklistnerで使用するコードです。
LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
slider.setLayoutParams(lp);
これをアニメートしたい。アニメーションをスライダーに設定するにはどうすればよいですか。
レイアウトにスライダーアニメーションを実装する場合は、 このデモ を参照してください。
[〜#〜]更新[〜#〜]
http://www.inter-fuser.com/2009/07/Android-transistions-slide-in-and-slide.html も参照してください。
それがあなたを助けることを願っています。
そうでない場合は、私に知らせてください。
ありがとう。楽しい。 :)
高さ0から最終的な高さまでビューをアニメーション化するだけだと思います。これは、カスタムアニメーションを使用して行うことができます。
public class ShowAnim extends Animation {
int targetHeight;
View view;
public ShowAnim(View view, int targetHeight) {
this.view = view;
this.targetHeight = targetHeight;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
view.getLayoutParams().height = (int) (targetHeight * interpolatedTime);
view.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
public boolean willChangeBounds() {
return true;
}
}
そして、アニメーションを開始するには、コードでこれを行います。
Animation ani = new ShowAnim(headerView, 100/* target layout height */);
ani.setDuration(2000/* animation time */);
headerView.startAnimation(ani);
JavaまたはkotlinでanimateLayoutChangesxmlとenableTransitionTypeを使用する
1。ルートレイアウトxmlにanimateLayoutChangesを追加
<LinearLayout
Android:id="@+id/mainLinearLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:animateLayoutChanges="true"
Android:orientation="vertical">
<Android.support.v7.widget.AppCompatEditText
Android:id="@+id/editText"
Android:layout_width="match_parent"
Android:layout_height="0dp" />
</LinearLayout>
2。Javaの場合
LayoutTransition layoutTransition = mainLinearLayout.layoutTransition;
layoutTransition.setDuration(5000); // Change duration
layoutTransition.enableTransitionType(LayoutTransition.CHANGING);
editText.layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; // you can set number, example: 300
editText.requestLayout();
.in kotlin
val layoutTransition = mainLinearLayout.layoutTransition
layoutTransition.setDuration(5000) // Change duration
layoutTransition.enableTransitionType(LayoutTransition.CHANGING)
editText.layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT // you can set number, example: 300
editText.requestLayout()
Androidにレイアウト遷移があるので、JELLYBEANなので、アニメーションオブジェクトを使用する代わりにそれを使用できます。
以下の記事で詳しく説明しています。 https://proandroiddev.com/the-little-secret-of-Android-animatelayoutchanges-e4caab2fddec
要するに、このコードだけが必要になるでしょう-
tView.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
tView.setLayoutParams(lp);
ここで、lpはレイアウトパラメータになります
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.MATCH_PARENT, newHeight);
追加するもう1つのことは、遷移を実行するレイアウトに、レイアウトファイルのこの行を追加することです。
Android:animateLayoutChanges="true"
線形レイアウトとその子のレイアウトパラメータの変更をアニメーション化するには、LayoutTransitionを使用できます。
子のLayoutParamsをハングアップする前に、以下のコードスニペットのllRoot.setLayoutTransition(layoutTransition)
のように、線形レイアウトの親に遷移を定義してアタッチすることが重要です。
LayoutTransition のサポートは上記Android JellyBean
private var AnimationDuration = 1100f
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN)
private fun fadeOutControls() {
var layoutTransition = LayoutTransition()
layoutTransition.setDuration(AnimationDuration.toLong()) // Change duration
layoutTransition.enableTransitionType(LayoutTransition.CHANGING)
layoutTransition.addTransitionListener(object : LayoutTransition.TransitionListener {
override fun startTransition(transition: LayoutTransition, container: ViewGroup, view: View, transitionType: Int) {
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
override fun endTransition(transition: LayoutTransition, container: ViewGroup, view: View, transitionType: Int) {
//Change this line of code to below one
transition.disableTransitionType(LayoutTransition.CHANGING)
}
})
// set transition to Linear layout
llRoot.setLayoutTransition(layoutTransition)
// change Layout params of child now to animate Transition
val lp = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
lp.weight = 10f
mediaRoot.setLayoutParams(lp)
leftControl.visibility = View.GONE
rightControl.visibility = View.GONE
}