SupportFragment转换动画可能吗?



我最近一直在尝试为我的应用程序添加一些很酷的片段过渡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>
<<p> Gradle依赖/strong>
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+"

看看这篇关于Flip动画的文章。此外,这篇文章一定是有帮助的,至少我在11之前成功地使用了API级别的Flip动画(实际上在2.3.5上进行了测试,它可以工作)。简而言之,你需要一个"支持v4支持nineoldandroid"的库。

最新更新