Activity和Fragment的转场动画

作者: 陈利健 | 来源:发表于2015-03-17 18:00 被阅读4003次

    Activity设置转场动画需要在startActivity和finish之后,意为给开启新视图或关闭旧视图添加转场动画。

    这是Acitivity通过overridePending方法,设置进和出:

    //新acitivity从以后边向左边滑入页面
    startActitivity(MainAcitity.this, NewActivity.class);
    overridePendingTransition(R.anim.push_left_in_no_alph,
                R.anim.push_left_out_no_alpha);
    
    //需要销毁的Activity向右边屏幕边缘滑出页面
    finish();
    overridePendingTransition(R.anim.push_right_in_no_alpha,
                    R.anim.push_right_out_no_alpha);
    
    //让返回键也执行动画
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        overridePendingTransition(R.anim.push_right_in_no_alpha,
                R.anim.push_right_out_no_alpha);
    }
    

    Fragment的设置需要在transaction.add 或transaction.remove之前。
    Fragment有两种方式,一种android提供了默认方法,一种自定义动画

    //淡入淡出的默认动画
    transaction = getSupportFragmentManager().beginTransaction();
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    
    //设置自定义过场动画
    transaction.setCustomAnimations(            
                R.anim.push_left_in,
                R.anim.push_left_out,
                R.anim.push_left_in,
                R.anim.push_left_out);
    

    动画文件放置位置: res/anim: 这是兼容API-11以下的,只能有四种补间动画方式

    //push_left_in_no_alpha,acitivity转场的时候用alpha会不好看
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="200"
            android:fromXDelta="100%p"
            android:toXDelta="0" />
    </set>
    
    //push_left_out_no_alpha
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="200"
            android:fromXDelta="0"
            android:toXDelta="-100%p" />
    </set>
    
    //push_right_in_no_alpha
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="200"
            android:fromXDelta="-100%p"
            android:toXDelta="0" />
    </set>
    
    //push_right_out_no_alpha
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <translate
            android:duration="200"
            android:fromXDelta="0"
            android:toXDelta="100%p" />
    </set>
    

    用set标签的意思是可以集合多个动画一起执行,也可以自行选择单个动画,如alpha等。

    相关文章

      网友评论

      本文标题:Activity和Fragment的转场动画

      本文链接:https://www.haomeiwen.com/subject/mqgixttx.html