布局动画 laoyotAnimation

layout动画在每次布局发生变化的时候系统调用的一个预加载动画效果,使用layout动画可以让布局的变化过度看起来更自然。使用起来很简单,只需在控件中添加一个属性就可以了,系统默认是不会启动layout动画的,因此我们平时的应用中不会产生这个效果。

当然,如果你想自定义一下这个动画效果,那就必须在代码中自己写了:新建一个LayoutTransition对象,调用setLayoutTransition()方法来为layout设置动画。


注意:只有组合控件才有布局动画


例子:控制线性布局子对象的出现动画

在这里要接触一个动画控制器LayoutAnimationController ,很明显的意思是布局动画控制器,其作用是为viewGroup中的控件设置相同的动画

其构造方法之一

public LayoutAnimationController(Animation animation, float delay) {
    throw new RuntimeException("Stub!");
}
第一个参数是控件展现的动画,第二个参数是动画延迟的比例,也就是Animation的Duration乘以delay
如何代码设置布局动画呢?
viewGroup.setLayoutAnimation(lac)

详细代码:如下:
package com.example.xuan.layoutAnimation;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.LayoutAnimationController;
import android.view.animation.ScaleAnimation;
import android.widget.LinearLayout;

public class MainActivity extends FragmentActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceHolderFragment()).commit();
        }


    }

    public static class PlaceHolderFragment extends Fragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            final LinearLayout rootView = (LinearLayout) inflater.inflate(R.layout.fragment_main, container, false);

            ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1);
            sa.setDuration(5000);
            LayoutAnimationController lac = new LayoutAnimationController(sa, 0.5f);
            rootView.setLayoutAnimation(lac);
            rootView.setLayoutAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                    System.out.println("----->start");
                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    System.out.println("----->end");
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                    System.out.println("----->repeat");
                }
            });
            return rootView;
        }
    }


}
属性动画还有一个不错的属性设置:子空间是顺序动画,还是逆序动画,还是随机动画?
 
 
lac.setOrder(LayoutAnimationController.ORDER_RANDOM);

LayoutAnimationController.ORDER_NORMAL;    //顺序显示
  LayoutAnimationController.ORDER_REVERSE;//反显示
  LayoutAnimationController.ORDER_RANDOM//随机显示

你可能感兴趣的:(动画,view,布局)