【问题标题】:Is SupportFragment transition Animation possible?SupportFragment 过渡动画是否可能?
【发布时间】:2014-08-20 05:23:16
【问题描述】:

我最近一直在尝试为我的应用程序添加一些很酷的片段转换animations,并且我或多或少地想出了如何做到这一点。但是我只能让我的动画在 API level 11 and up 上工作。这是因为我使用的是兼容库不支持的属性动画。我试图通过包含nineOldAndroids 库来解决这个问题。我还投入了support-v4-NineOldAndroids 库来提供帮助。

当我运行较新的设备并为旧设备引发运行时错误时,我的动画仍然有效。 SupportFragment 动画是否可能?如果是这样,你建议应该怎么做?

这是我为片段设置动画的逻辑。我需要让我的主要片段滑到右侧,但在我的导航片段从左侧滑入时保持在视图中。

 public  void flipFragment() {
    if(showingMenu){
        getSupportFragmentManager().popBackStack();


        slideToMain(null);
        return;
    }

    showingMenu = true;


    Animator.AnimatorListener listener = new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {

            android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                    transaction.setCustomAnimations(R.anim.slide_in, 0, 0, R.anim.slide_out)
                    .add(R.id.fragment_container, customNavigation)
                    .addToBackStack(null)
                    .commit();
        }
    };
    slideToNav(listener);

}

private void slideToMain(String sReddit) {




        if (sReddit != null && apiTask != null) {
            apiTask.execute(sReddit);
        }


    View movingFragmentView = mainView.getView();

    PropertyValuesHolder rotateY = PropertyValuesHolder.ofFloat("rotationY",-15f, 0f);
    PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX",1.0f);
    PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 1.0f);
    PropertyValuesHolder translateX = PropertyValuesHolder.ofFloat("translationX",0f);

    ObjectAnimator movingFragmentsAnimator = ObjectAnimator.ofPropertyValuesHolder(movingFragmentView, rotateY, scaleX, scaleY, translateX);


    movingFragmentsAnimator.setDuration(1300);
    movingFragmentsAnimator.setStartDelay(1);

    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.play(movingFragmentsAnimator);
    animatorSet.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            showingMenu = false;
        }
    });
    animatorSet.start();

}

private void slideToNav(Animator.AnimatorListener listener) {
    View movingFragmentView = mainView.getView();

    PropertyValuesHolder rotateY = PropertyValuesHolder.ofFloat("rotationY",-15f);
    PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX",0.8f);
    PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 0.8f);
    PropertyValuesHolder translateX = PropertyValuesHolder.ofFloat("translationX",400f);

    ObjectAnimator movingFragmentsAnimator = ObjectAnimator.ofPropertyValuesHolder(movingFragmentView, rotateY, scaleX, scaleY, translateX);


    movingFragmentsAnimator.setDuration(1000);


    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.playTogether(movingFragmentsAnimator);
    animatorSet.addListener(listener);
    animatorSet.start();


}

动画 xml

<set>
<objectAnimator
    android:valueFrom="-100"
    android:valueTo="-1290"
    android:propertyName="translationX"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:duration="1300"
    />
<objectAnimator
    android:valueFrom="0"
    android:valueTo="1"
    android:propertyName="alpha"
    android:startOffset="1000"
    android:duration="1"
    />
</set>

Gradle 依赖项

compile files('libs/nineoldandroids-2.4.0.jar')
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile files('libs/support-v4-animator-13.0.0-sources.jar')
compile "com.android.support:appcompat-v7:19.1.0+"

【问题讨论】:

  • 你也可以试试Nine Old Android
  • 感谢您的建议,但如果您阅读我的帖子,您会注意到问题是关于让 Nineoldandroids 为片段动画工作

标签: android animation fragment android-support-library


【解决方案1】:

看看this post - 它是关于翻转动画的。 this post 也一定很有帮助,至少我在 11 之前的 API 级别成功使用了 Flip 动画(实际上在 2.3.5 上进行了测试并且可以正常工作)。简而言之 - 您需要一个“对 NineOldAndroids 的 support-v4 支持”库。

【讨论】:

  • 你能在android studio中做到这一点吗?我在设置 support-v4-animator 时遇到了所有类型的问题。我只需要它和 Nineoldandroids 作为我的依赖项还是我也需要使用 actionbarsherlock?
  • 实际上我是使用基于 Ecplise 的 ADT 完成的,但我在 Android Studio 中并不能很好地帮助您。我想你应该 dl "support-v4 support for NineOldAndroids" lib 并将其提取并包含在你的 Android Studio 项目中。
  • 我想我已经成功设置了它,但是当我在 2.3.7 设备中尝试动画时,我得到了 animatorSet.Start() 的空指针异常,但它对我的3.0> 设备。
  • 这意味着您没有设法正确设置它:) 尝试在工作室中导入模块,指向“support-v4 support for NineOldAndroids”的源代码。那么你应该在你的应用程序的 build.gradle 行中添加 compile project(':here is the folder of support-v4 support for NineOldAndroids')
  • 我一直在使用 support-v4-animator-r12.jar,因为当我尝试将项目导入 android studio 时,我遇到了指向库中 getAndroidPrebuilt 命令的所有类型的 gradle 错误。所以 gradle 拒绝构建项目。我认为 jar 应该可以工作,因为我已经删除了我的 android v4 支持 lib 依赖项,并且我的 supportFragments 仍在解决
猜你喜欢
  • 1970-01-01
  • 2011-06-08
  • 2021-06-29
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2022-12-21
  • 2018-01-07
  • 1970-01-01
相关资源
最近更新 更多