您的位置:首页 > 移动开发 > Android开发

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

2015-09-20 12:39 781 查看

一、overridePendingTransition

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



使用步骤

1、在res下创建anim(该名称固定)文件,编写xml动画(需要编写进入动画,与退出动画)

2、开启activity,通过overridePendingTransition(enterAnim, exitAnim) 添加进出动画。

进入动画:

[code]<?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>


退出动画:

[code]<?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,设置动画:

[code]  Intent intent=new Intent(getApplicationContext(),MainActivity.class);
    startActivity(intent);
    //设置动画
    overridePendingTransition(R.anim.activity_in,R.anim.activity_out);


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

(1)LayoutTransition

使用步骤:

编写xml动画

创建LayoutTransition对象,并设置动画

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


将动画效果添加到布局中

[code]mlinearlayout.setLayoutTransition(transition);





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

2、动画(放缩动画)

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

[code]<?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

[code]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
载入动画。

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


③向布局添加动画

[code]
//设置动画进入的顺序为随机(此处还有多种顺序可选)          layoutcontroller.setOrder(LayoutAnimationController.ORDER_RANDOM);
 //添加动画 
            mlistview.setLayoutAnimation(layoutcontroller);
            //开启动画
         mlistview.startLayoutAnimation();





1、布局

[code]<?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

[code]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 LayoutAnimationController(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.activity_in));
            layoutcontroller.setOrder(LayoutAnimationController.ORDER_RANDOM);
            mlistview.setLayoutAnimation(layoutcontroller);
            mlistview.startLayoutAnimation();

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: