0

我正在尝试执行一个动画,其中我有两个片段堆叠在一起。

顶部片段是细节片段。底部片段是一个菜单列表视图片段。

我通过在活动布局中创建两个重叠的框架布局来做到这一点。我希望能够制作一个动画,其中背景片段将以类似于开门的方式显示, 只留下顶部片段边缘的 20% 可见。

我尝试使用 API 9 可用的标准视图动画库来制作此动画,但似乎只有像素被移动,但触摸映射仍然对应于顶部片段,并且无法访问底部菜单片段。

所以我下载了 Nineoldandroids 库并尝试使用带有 ObjectAnimators 的 AnimatorSet 来制作动画……除了这次片段被动画化时,它只显示灰色背景,而不是像以前那样在后面的片段。

这是关于我如何尝试实现简单翻译以显示背景片段的代码片段

  private void animateFragmentOut() {
        activeFragment = (Fragment)getSupportFragmentManager().findFragmentById(R.id.nav_item_fragment_container);
        View myView = activeFragment.getView();
    AnimatorSet set = new AnimatorSet();
    set.playTogether(
            ObjectAnimator.ofFloat(myView, "translationX", 0, 230)
    );
    set.setDuration(500).start();

}

为什么我使用这个动画时背景片段不显示?如何使用 Nineoldandroids 正确显示背景片段?

4

1 回答 1

0

我最终通过使用侦听器在动画开始时使用以下代码膨胀背景视图来解决这个问题

private void animateFragmentOut() {
        activeFragment = (Fragment)getSupportFragmentManager().findFragmentById(R.id.nav_item_fragment_container);
        View myView = activeFragment.getView();

    Animator.AnimatorListener listener = new AnimatorListenerAdapter() {
        @Override
        public void onAnimationStart(Animator animation) {
            launchNavigationFragment();
        }

        @Override

        public void onAnimationEnd(Animator animation) {
        }
    };


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

    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.playTogether(rotateY,scaleX,scaleY,translateX);
    animatorSet.addListener(listener);
    animatorSet.setDuration(700);
    animatorSet.start();
}

Saldy 尽管这在 API 级别 11> 和我的 API 9 设备上运行良好,但我仍然遇到与标准动画库相同的问题。视图像素平移,但触摸区域保持映射在同一位置。所以我无法与背景导航菜单片段交互。

于 2014-09-05T20:40:12.263 回答