【问题标题】:Android pop fragment from backstack with animation带有动画的后台堆栈中的Android弹出片段
【发布时间】:2014-10-18 14:21:40
【问题描述】:

我有一个在其中加载片段 A 的活动。 Fragment A 包含 ListView,当单击列表项时,我加载另一个 Fragment B 代替 Fragment A 以显示列表视图项的详细信息。在按钮单击并按下设备后退按钮时,它会加载前一个片段,即显示 ListView 的片段 A。所有这一切都很好,但我想在按下或按钮点击时加载带有动画的片段 A。我正在这样做但不工作:

   FragmentManager fsm = getSupportFragmentManager();
   FragmentTransaction ftransaction = fsm.beginTransaction();                   
   ftransaction.setCustomAnimations(R.anim.enter_from_left, R.anim.enter_from_left);        
   fsm.popBackStack();
   ftransaction.commit();

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
     android:duration="700"
     android:fromXDelta="-100%"
     android:fromYDelta="0%"
     android:toXDelta="0%"
     android:toYDelta="0%" />
</set>


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
  android:shareInterpolator="false" >

  <translate
    android:duration="700"
    android:fromXDelta="-100%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />

</set>

【问题讨论】:

    标签: android android-fragments android-animation


    【解决方案1】:

    如果你想要 backstack 动画,你需要使用:

    setCustomAnimations(int enter, int exit, int popEnter, int popExit)

    类似:

    setCustomAnimations(R.anim.enter_from_left, R.anim.enter_from_left,
            R.anim.exit_to_left, R.anim.exit_to_left); 
    

    【讨论】:

      【解决方案2】:

      就我而言

      FragmentTransaction ft = getFragmentManager().beginTransaction();
              ft.setCustomAnimations(android.R.anim.slide_in_left, 
                                     android.R.anim.slide_out_right, 
                                     R.anim.slide_in_right,
                                     R.anim.slide_out_left);
              ft.replace(R.id.fragment_container, targetFragment).addToBackStack(null).commit();
      

      这一行

      ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, 
                             R.anim.slide_in_right, R.anim.slide_out_left);
      

      将创建完美的动画。

      slide_in_right

      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <translate android:fromXDelta="50%p" android:toXDelta="0"
                     android:duration="@android:integer/config_mediumAnimTime"/>
          <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
                 android:duration="@android:integer/config_mediumAnimTime" />
      </set>
      

      slide_out_left

      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <translate android:fromXDelta="0" android:toXDelta="-50%p"
                     android:duration="@android:integer/config_mediumAnimTime"/>
          <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
                 android:duration="@android:integer/config_mediumAnimTime" />
      </set>
      

      【讨论】:

        【解决方案3】:

        使用导航组件也很简单:

                app:enterAnim="@anim/slide_in_left"
                app:exitAnim="@anim/slide_out_right"
                app:popEnterAnim="@anim/slide_in_right"
                app:popExitAnim="@anim/slide_out_left"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-11
          • 2015-09-30
          • 2011-09-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多