简介:
animation系统还提供了对ViewGroup中的View改变加入动画的功能。你可以使用 LayoutTransition 对ViewGroup中的View改变进行动画显示。
这里说的动画效果都是设置给容器(ViewGroup),然而效果是通过容器存放的View来体现的。
四种容器转换动画类型
当你添加或者移除ViewGroup中的View时,或者你调用View的setVisibility()方法来控制其显示或消失时,就处于一个转换状态。这种事件就有可能会激发动画。
当前被增加或者移除的View可以经历一个出现的动画或者一个消失的动画。
而且不止是当前要控制的View,ViewGroup中的其他View也可以随之进行变动,比如经历一个动画移动到新的位置。
所以一共有四种相关的动画类型:
1.View本身的出现动画;
2.消失动画;
3.由于新增了其他View而需要改变位置的动画;
4.由于移除了其他View而需要改变位置的动画。
(如果增加或移除了其他View之后,当前View的位置不需要改变,则无动画)。
你可以自定义这些动画,通过setAnimator() 方法把它们设置进一个 LayoutTransition 对象中去。
设置的时候需要一个 Animator 对象和一个常数。下面通过案例讲解:
案例
先说效果要求如下:
点击添加按钮是会添加新的按钮,按钮有变大的动画效果,点击新生成的按钮按钮消失
步骤
1、layout下布局文件
<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.my.administrator.myanimation.Main2Activity">
<Button
android:id="@+id/buton_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加按钮"/>
<LinearLayout
android:id="@+id/linearlayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
2、activity文件
public class Main2Activity extends AppCompatActivity {
private Button mButton;
private LinearLayout mLinearlayout;
int count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mButton = (Button) findViewById(R.id.buton_add);
mLinearlayout = (LinearLayout) findViewById(R.id.linearlayout);
LayoutTransition transition = new LayoutTransition();
transition.getDuration(2000);
transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_ani));//添加动画效果
/*效果写在一个animator中
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
<objectAnimator
android:duration="3000"
android:propertyName="scaleX"
android:valueFrom="0.5"
android:valueTo="1"></objectAnimator>
<objectAnimator
android:duration="3000"
android:propertyName="scaleY"
android:valueFrom="0.5"
android:valueTo="1"></objectAnimator>
</set>
*/
transition.setAnimator(LayoutTransition.CHANGE_APPEARING, null);//添加时实现动画
transition.setAnimator(LayoutTransition.DISAPPEARING, null);//删除时动画消失
transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, null);
mLinearlayout.setLayoutTransition(transition);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
Button btn = new Button(Main2Activity.this);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);//设置新生成的按钮宽高
btn.setLayoutParams(params);
btn.setText("按钮" + count);
btn.setScaleX(0f);
btn.setScaleY(0f);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mLinearlayout.removeView(v);//点击时新生成的按钮消失
}
});
mLinearlayout.addView(btn);//添加新按钮
}
});
}
}