web-dev-qa-db-ja.com

LinearLayoutでLayoutParamsを変更する際のアニメーション

私のアプリには、レイアウトの高さが0のLinearLayoutがあります。ボタンをクリックすると、このレイアウトの高さはLayoutParams.WRAP_CONTENTになります。これは私がonclicklistnerで使用するコードです。

LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
slider.setLayoutParams(lp);

これをアニメートしたい。アニメーションをスライダーに設定するにはどうすればよいですか。

16
Chrishan

レイアウトにスライダーアニメーションを実装する場合は、 このデモ を参照してください。

[〜#〜]更新[〜#〜]

http://www.inter-fuser.com/2009/07/Android-transistions-slide-in-and-slide.html も参照してください。

それがあなたを助けることを願っています。

そうでない場合は、私に知らせてください。

ありがとう。楽しい。 :)

0

高さ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);
25
Kai

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()
2
Rasoul Miri

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"
1
Dinesh

線形レイアウトとその子のレイアウトパラメータの変更をアニメーション化するには、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
    }
0
Hitesh Sahu