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();
    }
}


原文地址:https://www.cnblogs.com/zoro-zero/p/12620047.html

时间: 2024-10-06 23:05:53

Android Fragment 切换动画设置的相关文章

Fragment切换动画

题外话: 如何把一个 "小view" 或者 "小fragment" 覆盖到一个 "全屏view" 之上(见下图). 方法一(FrameLayout + layout_marginTop ): <FrameLayout          android:layout_width="match_parent"         android:layout_height="match_parent">

android Activity切换动画效果

为Activity设置左右进出的效果,可以通过在Mainfest.xml文件中设置主题的方式来实现.还可以使用java代码. 一.设置样式 先看看实现动画的样式: <style name="AnimationRToL" mce_bogus="1" parent="@<span style="color:#ff0000;">android:style/Animation.Activity</span>&quo

Android Activity切换动画overridePendingTransition

Activity在切换或者是退出的时候能够使用渐入,滑动,缩放等动态效果.使用的就是方法overridePendingTransition,能够直在Activity其中直接调用. overridePendingTransition(R.anim.zoomin, R.anim.zoomout) 第一个參数是事实上动画,第二个參数是结束动画.此方法在startActivity()或者是finish()后调用,在切换或是退出时就会调用此动画. Intent phoneIntent=new Intent

Android–ViewPager切换动画,PageTransformer

transformPage(View view, float position) view就是滑动中的那个view,position这里是float类型,是当前滑动状态的一个表示,比如当滑动到正全屏时,position是0,如果前一页和下一页基本各在屏幕占一半时,前一页的position是-0.5,后一页的posiotn是0.5(是-0.5还是0.5要看当前的view是前面那一页的view还是后面那一页的),所以根据position的值我们就可以自行设置需要的alpha,x/y信息,就是可以用s

Android fragment 切换加载数据卡顿问题

接着上一篇项目的进度,上一篇讲了如何利用fragment来实现下拉菜单,公用菜单,以实现切换主界面数据的功能,这时候遇到的问题是:使用了fragment的切换界面方法,但加载的数据太多,用户从一个界面切换到这个界面的时候,至少有一两秒的卡顿,这是无法忍受的,代码如下: private void initOpenMenuItem(View popupWindow_view) { <span style="white-space:pre"> </span>Drawa

Android 屏幕切换动画

public void overridePendingTransition (int enterAnim, int exitAnim) Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next. As of JELLY_BEAN an alternative to using t

Android Activity切换动画

Activity间跳转,在startActivity(intent)后面可以重写public void overridePendingTransition (R.anim.enterAnim, R.anim.exitAnim); 其中enterAnim为进入动画,exitAnim为出去动画. 在drawable文件夹中新建enterAnim.xml文件 <?xml version="1.0" encoding="utf-8"?> <scale xm

Android Activity切换动画多种实现方式与封装

关于Activity动画那些事 关于activity的动画,相信大家再熟悉不过了,我们开发中经常用到,网上资料也很多,但是也有一些小细节需要我们注意,今天这篇文章我总结了几种常用的动画实现方式,通过这篇文章,你可以了解到: 几种常见的activity动画实现方式 activity动画中需要注意的细节 这几种方式的优缺点比较,我们如何取舍 对这几种方式进行简易封装,提高我们的开发效率 几种常见的实现方式: 1. activity.overridePendingTransition() 这种方式相信

android视图切换动画:ViewAnimator类及其子类

类图: