layoutAnimation可以作用于ViewGroup
Android提供了:
android:animateLayoutChanges
android:layoutAnimation 属性
如: 给LinearLayout增加, 移除子View的时候添加动画
直接加上android:animateLayoutChanges=”true”就可以拥有布局改变时的动画
<LinearLayout
android:id="@+id/ll_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:animateLayoutChanges="true"
android:orientation="vertical" />
另一种方法是指定android:layoutAnimation=”@anim/anim*”
如: 给ListView指定滑入动画
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layoutAnimation="@anim/anim_list_slide_right" />
anim_list_slide_right.xml
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/anim_slide_right"
android:animationOrder="normal"
android:delay="20%" />
<!--
android:delay表示动画播放的延时,既可以是百分比,也可以是float小数。单位: 秒
android:animationOrder表示动画的播放顺序,有三个取值normal(顺序)、reverse(反序)、random(随机)。
android:animation指向了子控件所要播放的动画。-->
anim_slide_right.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromXDelta="100%p"
android:toXDelta="0" />
当然, 还可以在java代码中指定:
//通过加载XML动画设置文件来创建一个Animation对象;
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_slide_right);
//得到一个LayoutAnimationController对象;
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL); //设置控件显示的顺序;
controller.setDelay(0.2f); //设置控件显示间隔时间;
mListView.setLayoutAnimation(controller);//为ListView设置LayoutAnimationController属性;
完整代码:
LayoutTransitionActivity
public class LayoutTransitionActivity extends AppCompatActivity {
private LinearLayout mLlContainer;
private ListView mListView;
private int itemNum;
private ArrayAdapter<String> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout_transition);
mLlContainer = (LinearLayout) findViewById(R.id.ll_container);
mListView = (ListView) findViewById(listView);
List<String> testData = new ArrayList<>();
for (int i = 0; i < 10; i++) {
testData.add("item: " + i);
}
mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, testData);
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_add:
Button button = new Button(this);
button.setText("item: " + ++itemNum);
mLlContainer.addView(button);
break;
case R.id.btn_remove:
if (mLlContainer.getChildCount() > 0) {
mLlContainer.removeViewAt(mLlContainer.getChildCount() - 1);
itemNum--;
}
break;
case R.id.btn_removeAll:
if (mLlContainer.getChildCount() > 0) {
mLlContainer.removeAllViews();
itemNum = 0;
}
break;
case R.id.btn_listViewAnim:
// //通过加载XML动画设置文件来创建一个Animation对象;
// Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_slide_right);
// //得到一个LayoutAnimationController对象;
// LayoutAnimationController controller = new LayoutAnimationController(animation);
// controller.setOrder(LayoutAnimationController.ORDER_NORMAL); //设置控件显示的顺序;
// controller.setDelay(0.2f); //设置控件显示间隔时间;
// mListView.setLayoutAnimation(controller);//为ListView设置LayoutAnimationController属性;
mListView.setAdapter(mAdapter);
break;
default:
break;
}
}
}
源码参见: http://download.csdn.net/detail/maimiho/9660930
Android 动画总结-Activity切换动画 http://write.blog.csdn.net/mdeditor
Android 动画总结-Layout动画 http://blog.csdn.net/maimiho/article/details/52888887
Android 动画总结-帧动画 http://blog.csdn.net/maimiho/article/details/52893291
Android 动画总结-补间动画 http://blog.csdn.net/maimiho/article/details/52893403
Android 动画总结-属性动画 http://blog.csdn.net/maimiho/article/details/52894023
Android 动画总结-ViewPropertyAnimator http://blog.csdn.net/maimiho/article/details/52894151
Android 动画总结-矢量动画 http://blog.csdn.net/maimiho/article/details/52894266