12

次のレイアウト スニペットがあります。

    <LinearLayout
        android:id="@+id/tagContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true" >

    </LinearLayout>

    <TextView
        android:id="@+id/commentLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tagContainer" />

ご覧のとおり、animateLayoutChangesは に設定さtrueれているLinearLayoutため、アイテムが追加されると、その追加がアニメーション化されます。これは問題ありませんが、削除に問題があります。アイテムを削除すると、アニメーションは引き続き正常に再生されますが、TextView以下がすぐにポップアップし、アニメーションが終了するのを待ちません。どうすればこれを達成できますか、またはさらに良いことに、アニメーションをアニメーションTextViewと同期させることができLinearLayoutますか?

4

2 に答える 2

25

次の方法で、ビューからLayoutTransitionを取得できます。

mLinearLayout = findViewById(R.id.myLayout);
LayoutTransition layoutTransition = mLinearLayout.getLayoutTransition();
layoutTransition.addTransitionListener(new TransitionListener(){

            @Override
            public void endTransition(LayoutTransition arg0, ViewGroup arg1,
                    View arg2, int arg3) {
                switch(arg2.getId()){
                                //....
                                }
            }

            @Override
            public void startTransition(LayoutTransition transition,
                    ViewGroup container, View view, int transitionType) {
                switch(view.getId()){
                                //....
                                }

            }});
于 2013-07-25T21:26:37.410 に答える
2

これは答えではありませんが、何が起こっているのかを調べるためにすぐに使用できるコード スニペットです。

mContainer = (ViewGroup) v.findViewById(R.id.container);
if (Build.VERSION.SDK_INT >= 11) {
    mLayoutTransition = mContainer.getLayoutTransition();

    if (mLayoutTransition != null) {
        mLayoutTransition.addTransitionListener(new LayoutTransition.TransitionListener() {

            @Override
            public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {
                Log.d("\n\n startTransition: in "+container+" view "+view+" type "+ descr(transitionType));
            }

            @Override
            public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {
                Log.d("\n\n endTransition: in "+container+" view "+view+" type "+ descr(transitionType));
            }

            String descr(int transitionType) {
                String[] m = new String[]{"CHANGE_APPEARING","CHANGE_DISAPPEARING","APPEARING","DISAPPEARING"};
                return "" + transitionType + ": " + m[transitionType&3] + " changing="+( transitionType&LayoutTransition.CHANGING);
            }
        });
    }
}

私にとって、コンテナ ビューは でLinearLayoutあり、関心のあるイベントは次のとおりです。

public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { // UI thread
    if (transitionType == LayoutTransition.DISAPPEARING) {
        // start 2nd animation, it will be done while another view is moved
    }
}
于 2016-02-03T17:57:48.500 に答える