Android 動畫——Layout Animations佈局動畫

  Layout Animations主要使用LayoutTransition爲佈局的容器設置動畫,當容器中的視圖層次發生變化時存在過渡的動畫效果。

LayoutTransition

  This class enables automatic animations on layout changes in ViewGroup objects. To enable transitions for a layout container, create a LayoutTransition object and set it on any ViewGroup by calling setLayoutTransition(LayoutTransition). This will cause default animations to run whenever items are added to or removed from that container. To specify custom animations, use the setAnimator() method.
  
  對應理解:當在ViewGroup容器中視圖層次放生改變時,LayoutTransition能夠自動的設置過度的動畫。在視圖容器中爲了能夠轉換,我們通過創建一個ViewGroup對象調用setLayoutTransition(LayoutTransition)在ViewGroup設置這個過度動畫。我們也可以在視圖的添加和刪除時通過setAnimator()來設置動畫。

我們來看一下LayoutTransition的使用:

        LayoutTransition transition = new LayoutTransition();//創建LayoutTransition的對象。
        transition.setDuration(3000);//設置添加過度動畫顯示的時間。
        transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(this, R.animator.animator));//添加動畫
        mGridLayout.setLayoutTransition(transition);//將LayoutTransition添加到ViewGroup容器中。

Layout Animations實例應用

  我們在佈局中添加一個按鈕,通過點擊按鈕來實現在GridLayout佈局中動畫形式增加一個按鈕,點擊添加按鈕,按鈕會自動刪除。
佈局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.myanimation.LayoutAnimatorActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加按鈕"/>
    <GridLayout
        android:id="@+id/gridlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnCount="5"></GridLayout>

</LinearLayout>

Activity:

public class LayoutAnimatorActivity extends Activity {
    private Button mButtonAdd;
    private GridLayout mGridLayout;
    private int count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout_animator);
        mButtonAdd = (Button) findViewById(R.id.button);
        mGridLayout = (GridLayout) findViewById(R.id.gridlayout);

        //設置佈局的動畫
        LayoutTransition transition = new LayoutTransition();
        transition.setDuration(1000);
        transition.setAnimator(LayoutTransition.APPEARING, transition
                .getAnimator(LayoutTransition.APPEARING));
        transition.setAnimator(LayoutTransition.CHANGE_APPEARING, transition.getAnimator(LayoutTransition.CHANGE_APPEARING));
        transition.setAnimator(LayoutTransition.DISAPPEARING, transition.getAnimator(LayoutTransition.DISAPPEARING));
        transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING));
        mGridLayout.setLayoutTransition(transition);

        mButtonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count++;
                final Button button = new Button(LayoutAnimatorActivity.this);
                ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                button.setLayoutParams(params);
                button.setText(""+count);
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mGridLayout.removeView(v);
                    }
                });
                mGridLayout.addView(button);
            }
        });
    }
}

這裏使用到了LayoutTransition的四種效果:

這裏寫圖片描述

APPEARING:當一個View在ViewGroup中出現時,對此View設置的動畫

CHANGE_APPEARING:當一個View在ViewGroup中出現時,對此View對其他View位置造成影響,對其他View設置的動畫。

DISAPPEARING: 當一個View在ViewGroup中消失時,對此View設置的動畫。

CHANGE_DISAPPEARING: 當一個View在ViewGroup中消失時,對此View對其他View位置造成影響,對其他View設置的動畫。

CHANGE: 不是由於View出現或消失造成對其他View位置造成影響,然後對其他View設置的動畫。

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章