【问题标题】:Crossfade animation between fragments or Activities片段或活动之间的交叉淡入淡出动画
【发布时间】:2018-01-08 09:50:39
【问题描述】:

我想在片段之间实现交叉淡入淡出动画(不是淡出/淡入动画,因为它允许在动画之间短暂看到底层活动/片段)

Android 开发者有指南如何交叉淡入淡出视图 “Crossfading Two Views”,但我不知道如何实现片段或活动之间的交叉淡入淡出。

以某种方式制作自定义动画并覆盖 onCreateAnimator 函数,或者甚至有可能吗??

【问题讨论】:

    标签: android android-fragments android-animation android-6.0-marshmallow


    【解决方案1】:

    在Activity中试试这个(这个可以放到一些BaseActivity中)

        @Override public void startActivity(Intent intent) {
            super.startActivity(intent);
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out)
        }
    
        @Override public void finish() {
            super.finish();
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    

    在哪里淡入:

    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="@integer/activity_transition_duration"
           android:fromAlpha="0.0"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:toAlpha="1.0" />
    

    和淡出:

    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:duration="@integer/activity_transition_duration"
           android:fillAfter="true"
           android:fromAlpha="1.0"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:toAlpha="0.0" />
    

    对于片段:

        FragmentTransaction transaction = supportFragmentManager.beginTransaction()
    
        transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out,
                    R.anim.fade_in, R.anim.fade_out)
    

    【讨论】:

      【解决方案2】:

      这是一个有点老的问题,但我会为 fragments 添加我的交叉淡入淡出动画版本。 @Demonick 对片段的回答对我不起作用,因为我对片段使用了 ViewPager,并且使用 FragmentTransaction 比我所看到的要多得多。

      private inner class FadeBetweenFragments : ViewPager.PageTransformer {
      
          private val MIN_SCALE = 0.1f
          private val MIN_ALPHA = 0.4f
      
          override fun transformPage(view: View, position: Float) {
              view.apply {
                  alpha = when {
                      position < -1 -> {
                          0f
                      }
                      position <= 1 -> {
                          val scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position))
                          (MIN_ALPHA +
                                  (((scaleFactor - MIN_SCALE) / (1 - MIN_SCALE)) * (1 - MIN_ALPHA)))
                      }
                      else -> {
                          0f
                      }
                  }
              }
          }
      }
      

      我在有 viewPager 的活动中添加了以下类。 实现类后,您需要在设置 ViewPager 时添加以下内容:

      viewPager.setPageTransformer(true, FadeBetweenFragments())
      

      【讨论】:

        猜你喜欢
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        • 1970-01-01
        • 2019-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多