安卓动画之listView动画,Activity切换动画,Fragment切换动画及LayoutAnimation的使用

时间:2021-11-22 22:41:50

View动画的特殊使用场景

 1. LayoutAnimation:  

      layoutAnimation作用于ViewGrop,为这个ViewGroup指定一个动画,这样当它的子元素出场时都会具有这种动画效果,有代码和xml两种方式

      一般我们可以作用于listView,线性布局,相对布局等

  xml:

<?xml version="1.0" encoding="utf-8"?>

<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="normal"
android:animation="@anim/anim_item"
/>

代码:

/**
* layoutAnimation代码
*/
Animation animation1 = AnimationUtils.loadAnimation(LayoutActivity.this, R.anim.anim_item);

LayoutAnimationController controller = new LayoutAnimationController(animation1);
// delay:表示子动画开始动画的延迟,比如子元素入场动画的周期为300,如果delay = 0.5的话,表示每个子元素都需要延迟150ms才能播放入场动画
controller.setDelay(0.5f);
// annimationOrder :表示子元素动画的顺序, nomal,reverse,random
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listView.setLayoutAnimation(controller);  /**

    但是这样作用于listview的话有一个缺点就是一进入listview就全部执行动画,而不能随着listview的滑动而执行动画,如果     想要随着listview的滑动而执行动画,需要在adapter中getView()方法中执行这样的操作: 
Animation animation = AnimationUtils.loadAnimation(LayoutActivity.this, R.anim.anim_item);
view.startAnimation(animation);
2.Activity的切换效果:     Activity切换的动画主要用到 overridePendingTransition(int enterAnim,int exitAnim)这个方法,这个方法必须在startActivity(intent)或者finish()之后调用才能生效     
Intent intent = new Intent(MainActivity.this, LayoutActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
//do something...
finish();
overridePendingTransition(R.anim.zoomout,R.anim.zoomin);
return true;
}
return super.onKeyDown(keyCode, event);
}
3.Fragment的切换效果:
  因为Fragment我们始终API11中新引入的类,因此为了兼容我们需要引入v4包,也不能使用属性动画,因为属性动画也是API11引入的,具体使用方法是我们可以通过FragmentTransaction中的setCustomAnimations()来添加切换动画
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
//可以为Fragment添加切换动画
transaction.setCustomAnimations(arg0, arg1);
transaction.replace(contentLayout, fragment);
transaction.commitAllowingStateLoss();
// transaction.commit();