Android Activity和Fragment的转场动画
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android Activity和Fragment的转场动画,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7532字,纯文字阅读大概需要11分钟。
内容图文
![Android Activity和Fragment的转场动画](/upload/InfoBanner/zyjiaocheng/1123/ecdc5c53d86e4cc985c6564567aea68e.jpg)
Activity转场动画
Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的。
这个方法是API Level 5 加入的。
这个方法在startActivity(Intent)
or finish()
之后被调用,指定接下来的这个转场动画。
方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID;
第二个参数exitAnim,是旧的Activity(当前的Activity)离开动画的resource ID。
所以这两个参数的对象是两个Activity。
如果上面两个参数没有动画要设置,则用0作为参数。
动画的资源文件放在res\anim\目录下,是View Animation。
参见本博客博文: Android Animation学习(六) View Animation介绍
View Animation包含了基本的动画类型,基本可以满足一般转场动画的需要。
根节点可以是:<alpha>, <scale>, <translate>, <rotate>, interpolator element, 或者是<set>。
利用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" /> < alpha android:fromAlpha ="0.0" android:toAlpha ="1.0" android:duration ="2000" /> </ 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 >
Fragment转场动画
Fragment的转场动画实现分为使用v4包和不使用v4包两种情况,不使用v4包的话,最低API Level需要是11。
标准转场动画:
可以给Fragment指定标准的转场动画,通过setTransition(int transit)方法。
该方法可传入的三个参数是:
TRANSIT_NONE,
TRANSIT_FRAGMENT_OPEN,
TRANSIT_FRAGMENT_CLOSE
分别对应无动画、打开形式的动画和关闭形式的动画。
标准动画设置好后,在Fragment添加和移除的时候都会有。
自定义转场动画
自定义转场动画是通过setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back Stack中,所以转场动画有添加、移除、从Back stack中pop出来,还有进入四种情况。
注意setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作用。
android.app.Fragment
类参考:
Fragment: http://developer.android.com/reference/android/app/Fragment.html
FragmentTransaction: http://developer.android.com/reference/android/app/FragmentTransaction.html
不使用v4包的情况下(min API >=11)所对应的动画类型是Property Animation。
即动画资源文件需要放在res\animator\目录下,且根标签是<set>, <objectAnimator>, or <valueAnimator>三者之一。
这一点也可以从Fragment中的这个方法看出:onCreateAnimator(int transit, boolean enter, int nextAnim),返回值是Animator。
自定义转场动画时,四个参数的形式setCustomAnimations (int enter, int exit, int popEnter, int popExit)是API Level 13才有的,11只引入了两个动画的形式,即无法指定Back Stack栈操作时的转场动画。
代码例子:
private void addFragment() { if (null == mFragmentManager) { mFragmentManager = getFragmentManager(); } mTextFragmentOne = new MyFragmentOne(); FragmentTransaction fragmentTransaction = mFragmentManager .beginTransaction(); // 标准动画 // fragmentTransaction // .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); // fragmentTransaction // .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); // fragmentTransaction // .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); // 自定义动画 // API LEVEL 11 fragmentTransaction.setCustomAnimations( R.animator.fragment_slide_left_enter, R.animator.fragment_slide_right_exit); // API LEVEL 13 // fragmentTransaction.setCustomAnimations( // R.animator.fragment_slide_left_enter, // R.animator.fragment_slide_left_exit, // R.animator.fragment_slide_right_enter, // R.animator.fragment_slide_right_exit); fragmentTransaction.add(R.id.container, mTextFragmentOne); // 加入到BackStack中 fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); }
其中四个动画是从ApiDemos中拿来的:
fragment_slide_left_enter:
<? xml version="1.0" encoding="utf-8" ?> < set xmlns:android ="http://schemas.android.com/apk/res/android" > < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="100dp" android:valueTo ="0dp" android:valueType ="floatType" android:propertyName ="translationX" android:duration ="@android:integer/config_mediumAnimTime" /> < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="0.0" android:valueTo ="1.0" android:valueType ="floatType" android:propertyName ="alpha" android:duration ="@android:integer/config_mediumAnimTime" /> </ set >
fragment_slide_left_exit:
<? xml version="1.0" encoding="utf-8" ?> < set xmlns:android ="http://schemas.android.com/apk/res/android" > < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="0dp" android:valueTo ="-100dp" android:valueType ="floatType" android:propertyName ="translationX" android:duration ="@android:integer/config_mediumAnimTime" /> < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="1.0" android:valueTo ="0.0" android:valueType ="floatType" android:propertyName ="alpha" android:duration ="@android:integer/config_mediumAnimTime" /> </ set >
fragment_slide_right_enter:
<? xml version="1.0" encoding="utf-8" ?> < set xmlns:android ="http://schemas.android.com/apk/res/android" > < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="-100dp" android:valueTo ="0dp" android:valueType ="floatType" android:propertyName ="translationX" android:duration ="@android:integer/config_mediumAnimTime" /> < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="0.0" android:valueTo ="1.0" android:valueType ="floatType" android:propertyName ="alpha" android:duration ="@android:integer/config_mediumAnimTime" /> </ set >
fragment_slide_right_exit:
<? xml version="1.0" encoding="utf-8" ?> < set xmlns:android ="http://schemas.android.com/apk/res/android" > < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="0dp" android:valueTo ="100dp" android:valueType ="floatType" android:propertyName ="translationX" android:duration ="@android:integer/config_mediumAnimTime" /> < objectAnimator android:interpolator ="@android:interpolator/decelerate_quint" android:valueFrom ="1.0" android:valueTo ="0.0" android:valueType ="floatType" android:propertyName ="alpha" android:duration ="@android:integer/config_mediumAnimTime" /> </ set >
android.support.v4.app.Fragment
Fragment: http://developer.android.com/reference/android/support/v4/app/Fragment.html
FragmentTransaction: http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html
使用v4包,Fragment的使用不再局限于API Level 11之上,低等级的API也可以使用,但是这时候转场动画的类型是View Animation。
动画资源放在res\anim\路径下,和Activity的转场动画一样。
Fragment中的方法:onCreateAnimation(int transit, boolean enter, int nextAnim)返回值Animation。
FragmentTransaction中的setCustomAnimations()方法,两参数类型和四参数类型都可用。
所以一般还是用v4包的这个版本,一是兼容性比较好,另外View Animation其实基本可以满足转场动画的需要。
代码例子:
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(); }
Demo:
完整的例子项目: https://github.com/mengdd/HelloTransactionAnimations
原文:http://www.cnblogs.com/mengdd/p/3494041.html
原文:http://www.cnblogs.com/veins/p/3730966.html
内容总结
以上是互联网集市为您收集整理的Android Activity和Fragment的转场动画全部内容,希望文章能够帮你解决Android Activity和Fragment的转场动画所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。