Android Fragment 切换动画设置
Posted 代码艺术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Fragment 切换动画设置相关的知识,希望对你有一定的参考价值。
在Activity跳转之间可以设置动画效果,例如平移,渐变,旋转等动画,当然在Fragment中也可以设置切换的动画效果,可以达到跟ViewPager切换动画类似的效果。在Fragment中设置自定义切换动画主要分为了两种情景,一种是使用 android.app.Fragment包里面的Fragment类时,FragmentManager里面的FragmentTransaction事务只支持XML中的animator标签,如objectAnimator属性动画,不支持传统的补间动画标签如<translate>,<alpha>等。
另一种是使用兼容性版本的android.support.v4.app.Fragment包里面的Fragment类,SupportFragmentManager里面的FragmentTransaction事务支持XML中的animation标签,也就是传统的补间动画,例如<translate>,<alpha>,不支持属性动画标签。
设置Fragment的切换动画主要是使用FragmentTransaction事务类的中setCustomAnimations方法:
setCustomAnimations FragmentTransaction setCustomAnimations (int enter, int exit, int popEnter, int popExit)
该方法有4个参数,第一个参数enter是指当一个Fragment被添加added 或者绑定attached到视图上,该Fragment进入视图时的animation或者animator的资源ID;
第二个参数exit是指当一个Fragment从视图上被移除removed或者解除绑定detached时,该Fragment移出视图时的animation或者animator的资源ID;
第三个参数popEnter是指当调用popBackStack()方法或者类似的方法弹出栈顶的Fragment后,Fragment栈的栈顶Fragment重新被添加readded或重新绑定reattached到视图上时,该Fragment进入视图时的animation或者animator的资源ID;
第四个参数popExit是指当调用popBackStack()方法或者类似的方法弹出栈顶的Fragment时,该弹出的Fragment即从视图上被移除removed或者解除绑定detached,该Fragment移出视图时的animation或者animator的资源ID。
android.support.v4.app.Fragment包实现
要实现Fragment的自定义切换动画效果,首先需要自定义XML动画资源文件,可以在res文件夹下新建anim文件夹然后新建XML资源文件。由于android.support.v4.app.Fragment包只支持补间动画的标签,所以可以按照自己的想法来在根标签set中新建动画标签来实现效果,如translate平移,alpha渐变透明度,rotate旋转,scale缩放等。
- slide_left_in.xml 左视图进入时动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0%p" android:duration="300"/> <alpha android:fromAlpha="0.5" android:toAlpha="1.0" android:duration="100"/> </set>
- slide_left_out.xml 左视图移出时动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0%p" android:toXDelta="-100%p" android:duration="300"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.5" android:duration="200"/> </set>
- slide_right_in.xml 右视图进入时动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0%p" android:duration="300"/> <alpha android:fromAlpha="0.5" android:toAlpha="1.0" android:duration="200"/> </set>
- slide_right_out.xml 右视图移出时动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0%p" android:toXDelta="100%p" android:duration="300"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.5" android:duration="200"/> </set>
Activity中实现
package com.example.call_aidl; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; public class Main2Activity extends AppCompatActivity { ActionBar actionBar; Fragment curFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab tab1 = actionBar.newTab(); tab1.setText("新业务Service"); tab1.setTabListener(new MyTabListener(new LeftFragment())); ActionBar.Tab tab2 = actionBar.newTab().setText("盘点Service"); tab2.setTabListener(new MyTabListener(new RightFragment())); actionBar.addTab(tab1); actionBar.addTab(tab2); } class MyTabListener implements ActionBar.TabListener{ private Fragment fragment; public MyTabListener (Fragment fragment){ this.fragment=fragment; } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { curFragment = fragment; ft.setCustomAnimations(R.anim.slide_right_in, R.anim.slide_left_out, R.anim.slide_left_in, R.anim.slide_right_out).replace(R.id.context,fragment); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { } } @Override protected void onDestroy() { super.onDestroy(); } }
以上是关于Android Fragment 切换动画设置的主要内容,如果未能解决你的问题,请参考以下文章
android ViewPager+fragment切换动画实现
android ViewPager+fragment切换动画实现