【Android】Activity切换动画效果
2015-09-29 17:39
585 查看
结论:
overridePendingTransition代码方式在手机动画关闭的状态下是无效的;
自定义theme方式下,Animation.Activity的4个属性中,在动画关或者不关闭的状态下只有两个有效;(推荐使用)
windowEnterAnimation
windowExitAnimation
windowShowAnimation//无效
windowHideAnimation//无效
具体操作方法不赘述了:
1.网络上的经验:
Android 关于Activity的跳转和finish时切换页面动画实现(这篇写了两种,一种代码,一种xml)
2.说说我碰到的问题:
首先是xml方式,因为Activity继承自AppCompatActivity,在继承主题时会报
You need to use a Theme.AppCompat theme (or descendant) with this activity.
错误,需要取用合适的theme
这并不是重点,重点是程序运行起来之后根本没有动画效果,我在确认动画xml文件的参数后,依然没有效果(上面链接的博文中的倒数第二个xml文件的参数设置是有问题的)
回到重点,无奈之下,查看style.xml源代码,发现了Animation.Activity的一系列参数:
逐一实验,发现其中只有两项参数对单一的activity有效果:
windowEnterAnimation和windowExitAnimation
如果想得到没有titlebar的activity主题,需要这样写:
另外,代码方式,我试过,也未见效果,最后才发现是调试的手机动画效果没开。。。。
其实在自己写动画的过程中利用Android自带的动画库可以实习部分位移效果,只是不满足activity连续画面的要求,下面贴出我写的位移AnimUtil类的部分代码:
如果不是切换activity,而是让布局中的某个控件有位移效果的话,这个AnimatorU足够使用了。
关键是参数中的(fromX,toX,fromY,toY)结合type参数,相信稍微开动一下脑筋就能明白其中原理
overridePendingTransition代码方式在手机动画关闭的状态下是无效的;
自定义theme方式下,Animation.Activity的4个属性中,在动画关或者不关闭的状态下只有两个有效;(推荐使用)
windowEnterAnimation
windowExitAnimation
windowShowAnimation//无效
windowHideAnimation//无效
具体操作方法不赘述了:
1.网络上的经验:
Android 关于Activity的跳转和finish时切换页面动画实现(这篇写了两种,一种代码,一种xml)
2.说说我碰到的问题:
首先是xml方式,因为Activity继承自AppCompatActivity,在继承主题时会报
You need to use a Theme.AppCompat theme (or descendant) with this activity.
错误,需要取用合适的theme
这并不是重点,重点是程序运行起来之后根本没有动画效果,我在确认动画xml文件的参数后,依然没有效果(上面链接的博文中的倒数第二个xml文件的参数设置是有问题的)
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%" android:toXDelta="0" android:duration="500" /> <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="500" /> </set> //应该是 fromXDelta="100%"
回到重点,无奈之下,查看style.xml源代码,发现了Animation.Activity的一系列参数:
<item name="activityOpenEnterAnimation">@anim/activity_open_enter</item> <item name="activityOpenExitAnimation">@anim/activity_open_exit</item> <item name="activityCloseEnterAnimation">@anim/activity_close_enter</item> <item name="activityCloseExitAnimation">@anim/activity_close_exit</item> <item name="taskOpenEnterAnimation">@anim/task_open_enter</item> <item name="taskOpenExitAnimation">@anim/task_open_exit</item> <item name="launchTaskBehindTargetAnimation">@anim/launch_task_behind_target</item> <item name="launchTaskBehindSourceAnimation">@anim/launch_task_behind_source</item> <item name="taskCloseEnterAnimation">@anim/task_close_enter</item> <item name="taskCloseExitAnimation">@anim/task_close_exit</item> <item name="taskToFrontEnterAnimation">@anim/task_open_enter</item> <item name="taskToFrontExitAnimation">@anim/task_open_exit</item> <item name="taskToBackEnterAnimation">@anim/task_close_enter</item> <item name="taskToBackExitAnimation">@anim/task_close_exit</item> <item name="wallpaperOpenEnterAnimation">@anim/wallpaper_open_enter</item> <item name="wallpaperOpenExitAnimation">@anim/wallpaper_open_exit</item> <item name="wallpaperCloseEnterAnimation">@anim/wallpaper_close_enter</item> <item name="wallpaperCloseExitAnimation">@anim/wallpaper_close_exit</item> <item name="wallpaperIntraOpenEnterAnimation">@anim/wallpaper_intra_open_enter</item> <item name="wallpaperIntraOpenExitAnimation">@anim/wallpaper_intra_open_exit</item> <item name="wallpaperIntraCloseEnterAnimation">@anim/wallpaper_intra_close_enter</item> <item name="wallpaperIntraCloseExitAnimation">@anim/wallpaper_intra_close_exit</item> <item name="fragmentOpenEnterAnimation">@animator/fragment_open_enter</item> <item name="fragmentOpenExitAnimation">@animator/fragment_open_exit</item> <item name="fragmentCloseEnterAnimation">@animator/fragment_close_enter</item> <item name="fragmentCloseExitAnimation">@animator/fragment_close_exit</item> <item name="fragmentFadeEnterAnimation">@animator/fragment_fade_enter</item> <item name="fragmentFadeExitAnimation">@animator/fragment_fade_exit</item>
逐一实验,发现其中只有两项参数对单一的activity有效果:
windowEnterAnimation和windowExitAnimation
<item name="android:windowEnterAnimation">@anim/activity_in_left</item> <item name="android:windowExitAnimation">@anim/activity_out_right</item>
如果想得到没有titlebar的activity主题,需要这样写:
<style name="themeSetting"> <item name="android:windowAnimationStyle">@style/AnimationActivity</item> <item name="android:windowNoTitle">true</item> </style> <style name="AnimationActivity" parent="@android:style/Animation.Activity"> <item name="android:windowEnterAnimation">@anim/activity_in_left</item> <item name="android:windowExitAnimation">@anim/activity_out_right</item> </style>
另外,代码方式,我试过,也未见效果,最后才发现是调试的手机动画效果没开。。。。
其实在自己写动画的过程中利用Android自带的动画库可以实习部分位移效果,只是不满足activity连续画面的要求,下面贴出我写的位移AnimUtil类的部分代码:
/** * @return */ private static TranslateAnimation moveFromTo(float fromX, float toX, float fromY, float toY) { TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, fromX, Animation.RELATIVE_TO_SELF, toX, Animation.RELATIVE_TO_SELF, fromY, Animation.RELATIVE_TO_SELF, toY); mHiddenAction.setDuration(CData.AnimaDura); return mHiddenAction; } /** * @return */ private static TranslateAnimation moveFromTo(float fromX, float toX, float fromY, float toY, long duration) { TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, fromX, Animation.RELATIVE_TO_SELF, toX, Animation.RELATIVE_TO_SELF, fromY, Animation.RELATIVE_TO_SELF, toY); mHiddenAction.setDuration(duration); return mHiddenAction; } public static void hideFromLeftToRight(View view) { view.setAnimation(AnimatorU.moveFromTo(0, 1, 0, 0)); view.setVisibility(View.INVISIBLE); } public static void showFromRightToLeft(View view) { view.setVisibility(View.VISIBLE); view.setAnimation(AnimatorU.moveFromTo(1, 0, 0, 0)); } public static void hideFromRightToLeft(View view) { view.setAnimation(AnimatorU.moveFromTo(0, -1, 0, 0)); view.setVisibility(View.INVISIBLE); } public static void showFromLeftToRight(View view) { view.setVisibility(View.VISIBLE); view.setAnimation(AnimatorU.moveFromTo(-1, 0, 0, 0)); }
如果不是切换activity,而是让布局中的某个控件有位移效果的话,这个AnimatorU足够使用了。
关键是参数中的(fromX,toX,fromY,toY)结合type参数,相信稍微开动一下脑筋就能明白其中原理
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories