您的位置:首页 > 移动开发 > Android开发

Android 动画——Layout Animations布局动画

2015-09-21 07:15 543 查看
  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设置的动画。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: