在Android开发中,view.setVisibility(View.VISIBLE) 或者 view.setVisibility(View.GONE) 这两句代码相信大家都经常用吧,比如你有一个长列表,里面的某一个条目被GONE掉了,那下面的条目会自动填充上去,如果没有动画效果,会显得比较生硬.
Android API给我们提供了一个属性,在ViewGroup的XML布局文件中把android:animateLayoutchanges 属性设置为true, 就会实现动画效果.
当然了,在代码中也可以设置,在4.1 JellyBean上,可以在容器内的子view的layout发生变化时也播放动画,用法如下:
//mContentRoot要设置的父布局
mContentRoot = (LinearLayout) findViewById(R.id.content_root);
LayoutTransition transition = new LayoutTransition();
transition.setDuration(5000);
mContentRoot.setLayoutTransition(transition);
这样就设置了动画的时间,当然了 如果你想设置自己的动画,比如alpha,translate等等,可以这么设置,我们先来了解一下五个属性:
LayoutTransition.APPEARING 当一个View在ViewGroup中出现时,对此View设置的动画
LayoutTransition.CHANGE_APPEARING 当一个View在ViewGroup中出现时,对此View对其他View位置造成影响,对其他View设置的动画
LayoutTransition.DISAPPEARING 当一个View在ViewGroup中消失时,对此View设置的动画
LayoutTransition.CHANGE_DISAPPEARING 当一个View在ViewGroup中消失时,对此View对其他View位置造成影响,对其他View设置的动画
LayoutTransition.CHANGE 不是由于View出现或消失造成对其他View位置造成影响,然后对其他View设置的动画。
mContentRoot = (LinearLayout) findViewById(R.id.content_root);
LayoutTransition transition = new LayoutTransition();
transition.setDuration(5000);
//设置自己想要的动画效果,自定义动画
transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(this, R.animator.animator_scale));
transition.setAnimator(LayoutTransition.CHANGE_APPEARING, AnimatorInflater.loadAnimator(this, R.animator.animator_scale));
transition.setAnimator(LayoutTransition.DISAPPEARING, AnimatorInflater.loadAnimator(this, R.animator.animator_scale));
transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING));
mContentRoot.setLayoutTransition(transition);
这样就在代码中设置了你自己想要的效果属性.
其中animator_scale要在自己的res文件夹下面创建一个 animator文件夹,
这样就会实现你想要的动画效果,也不会让你自己的控件显示和隐藏变得那么生硬,其实最简单的是让调用系统的,也就一句话的事~