一、overridePendingTransition

  我们之前讲的动画都是针对View的动画,其实在我们开启一个Activity的时候,我们也可以产生动画效果,动画效果可以直接使用我们在​​ Android 动画效果(一): 四种动画基础(Alpha、Translate、Rotate、Scale) ​​中所介绍的,编写xml文件,通过overridePendingTransition来为我们Activity的载入添加动画效果。下面来看下它的具体使用步骤。

Android   动画效果(三):overridePendingTransition(界面切换动画)与LayoutTransition(布局动画)_android

使用步骤

1、在res下创建anim(该名称固定)文件,编写xml动画(需要编写进入动画,与退出动画)
2、开启activity,通过overridePendingTransition(enterAnim, exitAnim) 添加进出动画。
进入动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0"
android:toXScale="1"
android:fromYScale="0"
android:toYScale="1"
android:duration="2000"
<alpha
android:fromAlpha="0"
android:toAlpha="1"
</set>

退出动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1"
android:toXScale="0"
android:fromYScale="1"
android:toYScale="0"
android:duration="2000"
<alpha
android:fromAlpha="1"
android:toAlpha="0.2"
android:interpolator="@android:anim/overshoot_interpolator"
</set>

开启activity,设置动画:

.class);
startActivity(intent);
//设置动画
overridePendingTransition(R.anim.activity_in,R.anim.activity_out);

二、布局动画(两种方式)

(1)LayoutTransition

使用步骤:
编写xml动画
创建LayoutTransition对象,并设置动画

LayoutTransition transition=new LayoutTransition();
transition.getDuration(2000);
transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_scale));

将动画效果添加到布局中

mlinearlayout.setLayoutTransition(transition);

Android   动画效果(三):overridePendingTransition(界面切换动画)与LayoutTransition(布局动画)_ide_02


1、布局(只有一个Button按钮)

2、动画(放缩动画)

(这里使用了属性动画ObjectAnimator【对属相动画的使用不了解的参看​​ Android 属性动画(二):ObjectAnimator与ValueAnimator ​​】,也可以使用四种基础的动画进行编写)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
<objectAnimator
android:duration="1000"
android:propertyName="scaleX"
android:valueFrom="0.5"
android:valueTo="1.0"</objectAnimator>
<objectAnimator
android:duration="1000"
android:propertyName="scaleY"
android:valueFrom="0.5"
android:valueTo="1"
</objectAnimator>

</set>

3、、MainActivity

public class Mainactivity_layout extends Activity{
private Button mbtn_add;
//用于向linearlayout中动态添加按钮
private LinearLayout mlinearlayout;
private int count;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layoutani);
mbtn_add=(Button) findViewById(R.id.button_add);
mlinearlayout=(LinearLayout) findViewById(R.id.linearlayout);
//创建LayoutTransition
LayoutTransition transition=new LayoutTransition();
//设置动画时间
transition.getDuration(2000);
//第一个参数可以有多种:APPEARING:表示设置进入时动画
//CHANGE_APPEARING、CHANGE_DISAPPEARING、CHANGING、DISAPPEARING
//第二个参数是设置的动画,由于使用的是属性动画
//因此通过AnimatorInflater.loadAnimator获得
transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_scale));
//注:不要忘记将设置的布局动画添加到布局中
mlinearlayout.setLayoutTransition(transition);
//按钮监听,每次点击,添加一个按钮
mbtn_add.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
count++;
Button btn=new Button(Mainactivity_layout.this);
ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
btn.setLayoutParams(params);
btn.setText("按钮"+count);
//当按钮被点击时将被删除
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.GONE);

}
});
mlinearlayout.addView(btn);

}
});
}

(2)LayoutAnimationController

使用步骤:
①编写View进入时的动画
②创建LayoutAnimationController对象(此处使用的是基本的四种动画写的)
注:如果编写的是基本动画使用​​​AnimationUtils.loadAnimation​​​进行载入动画,如果编写的是属性动画使用​​AnimatorInflater.loadAnimator​​载入动画。

//布局动画控制器
LayoutAnimationController layoutcontroller=new LayoutAnimationController(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.activity_in));

③向布局添加动画

.setOrder(LayoutAnimationController.ORDER_RANDOM);
//添加动画
mlistview.setLayoutAnimation(layoutcontroller);
//开启动画
mlistview.startLayoutAnimation();

Android   动画效果(三):overridePendingTransition(界面切换动画)与LayoutTransition(布局动画)_xml_03


1、布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"

<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
</ListView>

</LinearLayout>

2、MainActivity

private ListView mlistview;
private List<String> mlist=new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_layoutc);
mlistview=(ListView) findViewById(R.id.listView);
for(int i=0;i<15;i++){
mlist.add("View"+i);
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,mlist);
mlistview.setAdapter(adapter);
//布局动画控制器
LayoutAnimationController layoutcontroller=new