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//随机显示