activity和fragment的转场动画的实现

最近工作中遇到了大量activity动画的切换场景,在网上找了些资源终于实现了,写一篇简单的blog记录一下

activity转场动画大家都很熟悉一般情况我们会用overridePendingTransition(enterAnim, exitAnim);方法来实现 这个方法是API Level 5 加入的。这个方法在startActivity(Intent) or finish()之后被调用(一定要在之后用才有效果哦),指定接下来的这个转场动画。

方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID;

方法的第二个参数exitAnim,是旧的Activity(当前的Activity)离开动画的resource ID。

所以这两个参数的对象是两个Activity。如果上面两个参数没有动画要设置,则用0作为参数。

动画的资源文件放在res\anim\目录下,是View Animation。整个动画是增加在activity的window上面,一定注意不要讲activity的背景颜色设置成透明的,要不然就看不到动画效果了。

View Animation包含了基本的动画类型,基本可以满足一般转场动画的需要。 根节点可以是:, , , , interpolator element, 或者是。 利用set可以进行各种嵌套组合。

代码例子

Intent intent = new Intent(TestActivities.this,TestActivityFirst.class);
startActivity(intent);
// transaction animation
overridePendingTransition(R.anim.slide_in_bottom,R.anim.slide_out_bottom);

其中两个动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="100%p" android:toYDelta="0"
            android:duration="2000"/>  //  从屏幕右方滑到屏幕中  持续时间2秒
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="2000" /> // 从完全透明变为完全不透明  持续时间2秒
</set>
<?xml version="1.0" encoding="utf-8"?>  // 动画和上面的相反
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%p" android:toYDelta="100%p"
            android:duration="2000"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:duration="2000" />
</set>

还有一种给activity增加动画的方式,就是通过theme给activity增加转场动画

首先在res文件夹下建立anim文件夹,然后在里面建立fade_in.xml和fade_out.xml两个动画资源
fade_in.xml // 渐入动画

<?xml version="1.0" encoding="utf-8"?>  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="300"  
    android:fromAlpha="0.0"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:toAlpha="1.0" />  

fade_out.xml // 渐出动画

<?xml version="1.0" encoding="utf-8"?>  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="300"  
    android:fromAlpha="1.0"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:toAlpha="0.0" /> 

接着声明style 注意 parent 要是theme 单独的style是不能当成主题设置到AndroidManifest.xml中的
也就是说 1是可以设置到android:theme=”“;中的,而2 不可以。

1.
   <style name="Anim_fade" parent="android:Theme.NoTitleBar">  
       <item name="android:windowAnimationStyle">@style/fade</item>  
   </style>  
2.
   <style name="fade" parent="@android:style/Animation.Activity">  
       <item name="android:activityOpenEnterAnimation">@anim/fade_in</item>   
       <item name="android:activityOpenExitAnimation">@anim/fade_out</item>  
       <item name="android:activityCloseEnterAnimation">@anim/fade_in</item>  
       <item name="android:activityCloseExitAnimation">@anim/fade_out</item>  
   </style> 

现在有两个activiy A1和A2
当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation 动画加在A1
当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation 动画加在A2
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation 动画加在A2
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation 动画加在A1

最后一步在AndroidManifest.xml中的Activity的声明上加入android:theme=”@style/Anim_fade”

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="com.example.customanimationforactivity"  
    android:versionCode="1"  
    android:versionName="1.0" >  

    <uses-sdk  
        android:minSdkVersion="10"  
        android:targetSdkVersion="10" />  

    <application  
        android:allowBackup="true"  
        android:icon="@drawable/ic_launcher"  
        android:label="@string/app_name"  
        android:theme="@android:style/Theme.NoTitleBar" >  
        <activity  
            android:name="com.example.customanimationforactivity.MainActivity"  
            android:label="@string/app_name"  
            android:theme="@style/Anim_fade" >  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
        <activity android:name=".AppActivity" android:theme="@style/Anim_fade" >  
        </activity>  
    </application>  

</manifest>  

关于activity动画就介绍这么多 其中参考了别人的文章,写下来仅仅为了自己以后少走弯路参考文章如下
http://blog.csdn.net/lmj623565791/article/details/22990643
http://blog.csdn.net/wangjia55/article/details/42556989

下面再接收一下fragment的切换动画
我再工作中也用到了两种方式

自定义转场动画

自定义转场动画是通过setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back Stack中,所以转场动画有add、replace、remove 从Back stack中pop出来,四种情况。

注意setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作

 private void addFragment() {
        if (null == mFragmentManager) {
            mFragmentManager = getSupportFragmentManager();
        }

        mTextFragmentOne = new MyFragmentOne();
        FragmentTransaction fragmentTransaction = mFragmentManager
                .beginTransaction();
        fragmentTransaction.setCustomAnimations(
                R.anim.push_left_in,
                R.anim.push_left_out,
                R.anim.push_left_in,
                R.anim.push_left_out);

        fragmentTransaction.add(R.id.container, mTextFragmentOne);

        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

动画的资源文件就不写了 很简单大家自己写一下就可以了。

通过复写oncreateAnimition方法实现动画

/**
* Called when a fragment loads an animation.
*/
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
return null;
}

如果你写的Fragment子类在继承Fragment后重写了这个方法内容,就可以在这里面得到动画。

这个方法可以实现某一个fragment的动画 具体怎么用每一个参数是什么意思,大家可以看一下google官方文档,用起来很简单。

希望 能帮助需要的人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值