Android-WindowAnimation和ActivityAnimation的区别和使用
来源:互联网 发布:c语言读取一行字符串 编辑:程序博客网 时间:2024/06/14 08:57
Android-WindowAnimation和ActivityAnimation的区别和使用
1. WindowAnimation和ActivityAnimation的区别主要如下:
- WindowAnimation包括windowEnterAnimation和windowExitAnimation;ActivityAnimation包含android:activityOpenEnterAnimation,android:activityOpenExitAnimation,android:activityCloseEnterAnimation和android:activityCloseExitAnimation。
- WindowAnimation的控制权大于ActivityAnimation的控制权,即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么可能(因为这种情况非常多)只会执行WindowAnimation。
- WindowAnimation在style.xml中继承Animation style的定义如下:
<style name="WindowAnim" parent="@android:style/Animation"> <!--窗体进入动画--> <item name="android:windowEnterAnimation">@anim/tweened</item> <!--窗体退出动画--> <item name="android:windowExitAnimation">@anim/alpha</item></style>
而ActivityAnimation在style.xml中继承Animation.Activity的定义如下:
<style name="test_activity_anim" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/alpha</item> <item name="android:activityOpenExitAnimation">@android:anim/fade_out</item> <item name="android:activityCloseEnterAnimation">@android:anim/fade_in</item> <item name="android:activityCloseExitAnimation">@android:anim/fade_out</item></style>
当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation
从上面WindowAnimation和ActivityAnimation的定义可知,WindowAnimation同一时间只可以控制一个activity的窗体动画,而ActivityAnimation同一时间可以控制两个activity的动画。
2. WindowAnimation的主要使用方式如下:
<style name="WindowAnim" parent="@android:style/Animation"> <item name="android:windowEnterAnimation">@anim/tweened</item> <item name="android:windowExitAnimation">@anim/alpha</item></style>
2.1 在主题中使用
<!-- Base application theme. --><style name="AppTheme" parent="android:Theme.Holo.Light"> <!-- Customize your theme here. --> <item name="android:windowAnimationStyle">@style/WindowAnim</item></style>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity></application>
上面这种方式会使得该应用程序的所有activity都使用WindowAnim样式。另外也可以像下面只设置指定的activity的动画。
<activity android:name=".AnimationActivity" android:theme="@style/WindowAnim"/>
注意: 上面这样动画只在指定的activity上起效果,其他未设置动画的activity当然就没有动画。
2.2 代码中的使用
final ImageView imageView = new ImageView(getApplicationContext());imageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher));imageView.setVisibility(View.VISIBLE);mLayoutParams = new WindowManager.LayoutParams();mLayoutParams.windowAnimations = R.style.WindowAnim; // 窗体的动画,必须是style中类似WindowAnim的定义样式mLayoutParams.x = 0;mLayoutParams.y = 0;mLayoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;mLayoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;mLayoutParams.gravity = Gravity.CENTER;mLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // 该窗体以外的部分也可以获取焦点getWindowManager().addView(imageView, mLayoutParams);
上述使用方式的动画效果必须是在imageView的状态发生改变时才会触发,比如imageView由不可见变成可见,或者当mLayoutParams改变时调用getWindowManager().updateViewLayout(imageView, mLayoutParam)。
3. ActivityAnimation的主要使用方式如下:
<style name="test_activity_anim" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/alpha</item> <item name="android:activityOpenExitAnimation">@android:anim/fade_out</item> <item name="android:activityCloseEnterAnimation">@android:anim/fade_in</item> <item name="android:activityCloseExitAnimation">@android:anim/fade_out</item></style>
3.1 类似WindowAnimation在主题中使用
<!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Holo.Light"> <!-- Customize your theme here. --> <item name="android:windowAnimationStyle">@style/test_activity_anim</item> </style>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/test_activity_anim"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity></application>
上面这种方式会使得该应用程序的所有activity都使用test_activity_anim样式。另外也可以像下面只设置指定的activity的动画。
<activity android:name=".AnimationActivity" android:theme="@style/test_activity_anim"/>
注意: 上面这样动画只指定的activity上起效果,其他未设置动画的activity当然就没有动画。
3.2 在代码中的使用
在Activity类中可以使用下面函数来自定义activity的动画:
// enterAnim:第二个activity进入的动画; exitAnim 第一个activity退出的动画; 参数类型:在anim文件夹下的动画overridePendingTransition(int enterAnim, int exitAnim);
注意:上面函数的调用一般在startActivity()或者finish()之后。
- Android-WindowAnimation和ActivityAnimation的区别和使用
- android转场动画windowAnimation和ActivityAnimation的区别
- Android 转场动画 windowAnimation和ActivityAnimation的区别
- android转场动画windowAnimation和ActivityAnimation的区别
- Android转场动画windowAnimation和ActivityAnimation的区别
- Android 转场动画 windowAnimation和ActivityAnimation的区别
- Android 转场动画 windowAnimation和ActivityAnimation的区别
- android转场动画windowAnimation和ActivityAnimation
- android -- ContextMenu 的使用 和 OptionsMenu 区别
- android setWebChromeClient和setWebViewClient的使用区别
- android:gravity 和 android:layout_Gravity属性的区别和使用
- Android的mipmap和drawable的区别和使用
- android中include和merge标记的区别和使用
- android中include和merge标记的区别和使用
- android中include和merge标记的区别和使用
- android--Merge和include标签的区别和使用
- android中include和merge标记的区别和使用
- Android中Rect和RectF的区别和使用
- maven dependency中scope=compile 和 provided区别
- 工作那些事儿
- HashMap实现原理
- iframe是什么?iframe用法详解
- js字符串反转
- Android-WindowAnimation和ActivityAnimation的区别和使用
- 分布式缓存集群的伸缩性设计
- C语言的qsort函数
- PCL例程使用CMake导入VS2013失败
- jquery请求服务器
- 缓冲区溢出:
- SwipeRefreshLayout无法下拉刷新了
- 微信小程序开发之拖拽 image 触摸事件监听
- 蒙特卡罗算法