首先看一个效果图:
XML布局如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.xbxzc.layouttransition.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="addButton"
android:text="添加Button"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="removeButton"
android:text="删除Button"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myLinearLayout"
android:animateLayoutChanges="true"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
其中有一个属性android:animateLayoutChanges="true
添加了以后会在生成Layout的时候添加默认的动画效果
Activity:
public class MainActivity extends AppCompatActivity {
LinearLayout mLinearLayout;
int mark=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLinearLayout= (LinearLayout) findViewById(R.id.myLinearLayout);
}
public void addButton(View view) {
mark++;
Button button=new Button(this);
button.setText("小苹果"+mark);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
mLinearLayout.addView(button,params);
}
public void removeButton(View view) {
if (mark>0){
//移除第一个View
mLinearLayout.removeViewAt(0);
}
}
}
LayoutTransition动画演示
//初始化布局动画
mTransition=new LayoutTransition();
mLinearLayout.setLayoutTransition(mTransition);
//设置布局动画效果
//view出现动画
ObjectAnimator animator=ObjectAnimator.ofFloat(null,"rotationY",90F,0F).
setDuration(mTransition.getDuration(LayoutTransition.APPEARING));
mTransition.setAnimator(LayoutTransition.APPEARING,animator);
//View消失动画
ObjectAnimator animator2 = ObjectAnimator.ofFloat(null, "rotationX", 0F, 90F, 0F).
setDuration(mTransition.getDuration(LayoutTransition.DISAPPEARING));
mTransition.setAnimator(LayoutTransition.DISAPPEARING, animator2);
通过设置了动画以后,显示效果如下: