• Android Fragment动画实现


    Android 中,你可以使用 FragmentTransaction 来实现 Fragment 的动画效果。这允许你在添加、替换或移除 Fragment 时应用动画,从而改善用户体验。下面是如何实现 Fragment 动画的基本步骤:

    1. 创建两个 Fragment:

    首先,创建两个 Fragment,例如 FragmentA 和 FragmentB。这些 Fragment 将被用于动画效果的演示。

    2. 创建 XML 文件定义动画效果:

    res/anim 目录下创建 XML 文件来定义 Fragment 的进入和退出动画效果。以下是示例文件 fragment_enter.xmlfragment_exit.xml,用于定义进入和退出动画:

    fragment_enter.xml:

    
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:fromAlpha="0.0"
            android:toAlpha="1.0"
            android:duration="500" />
        <translate
            android:fromXDelta="100%"
            android:toXDelta="0%"
            android:duration="500" />
    set>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    fragment_exit.xml:

    
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:fromAlpha="1.0"
            android:toAlpha="0.0"
            android:duration="500" />
        <translate
            android:fromXDelta="0%"
            android:toXDelta="-100%"
            android:duration="500" />
    set>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3. 在 Activity 中管理 Fragment:

    在你的 Activity 中管理 Fragment,使用 FragmentTransaction 来添加、替换或移除 Fragment,并设置动画效果。

    import androidx.appcompat.app.AppCompatActivity;
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentManager;
    import androidx.fragment.app.FragmentTransaction;
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        private Fragment fragmentA;
        private Fragment fragmentB;
        private boolean isFragmentAVisible = true;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            fragmentA = new FragmentA();
            fragmentB = new FragmentB();
    
            if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragmentContainer, fragmentA)
                    .commit();
            }
    
            findViewById(R.id.buttonToggle).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    toggleFragment();
                }
            });
        }
    
        private void toggleFragment() {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction transaction = fragmentManager.beginTransaction();
    
            if (isFragmentAVisible) {
                transaction.setCustomAnimations(
                    R.anim.fragment_enter,  // 进入动画
                    R.anim.fragment_exit   // 退出动画
                );
                transaction.replace(R.id.fragmentContainer, fragmentB);
            } else {
                transaction.setCustomAnimations(
                    R.anim.fragment_enter,  // 进入动画
                    R.anim.fragment_exit   // 退出动画
                );
                transaction.replace(R.id.fragmentContainer, fragmentA);
            }
    
            transaction.addToBackStack(null);
            transaction.commit();
            isFragmentAVisible = !isFragmentAVisible;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    在这个示例中,我们首先在 onCreate 方法中添加了一个初始的 FragmentA。然后,在点击按钮时,我们使用 FragmentTransaction 替换当前可见的 Fragment(FragmentA 或 FragmentB),并设置自定义的进入和退出动画。

    4. 在布局文件中添加 Fragment 容器:

    在你的布局文件中,添加一个 Fragment 容器来容纳 Fragment 的视图。例如,使用一个 FrameLayout 作为容器:

    <FrameLayout
        android:id="@+id/fragmentContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    • 1
    • 2
    • 3
    • 4

    以上是一个简单的示例,演示如何在 Android 中实现 Fragment 的动画效果。你可以根据你的需求和设计来定制和扩展这些动画。通过使用 FragmentTransaction 和自定义的进入/退出动画 XML 文件,你可以创建各种各样的 Fragment 切换动画。

  • 相关阅读:
    贪心一【深基12.例1】部分背包问题详解
    【结构体】
    【AI实战】超赞的几个OCR开源项目
    vue 引入pinia报 injection “symbol(pinia)“ not found
    smartbi 进行mongodb数据源的安装
    集合基础(ArrayList)
    ES6的模板字符串使用
    Blazor组件自做十一 : File System Access 文件系统访问 组件
    go语言 leetcod1 两数之和
    QUIC协议
  • 原文地址:https://blog.csdn.net/GYBIN02/article/details/132836139