Java 我将如何使用NineodelDroids在API级别9上制作此片段动画?

Java 我将如何使用NineodelDroids在API级别9上制作此片段动画?,java,android,animation,nineoldandroids,Java,Android,Animation,Nineoldandroids,我正在尝试执行一个动画,其中两个片段堆叠在一起 顶部片段是一个细节片段。 底部片段是一个菜单列表视图片段 为此,我在活动布局中创建了两个重叠的框架布局。我希望能够制作一个动画,背景片段将以类似于开门的方式显示,只留下顶部片段20%的边缘 我尝试使用API 9可用的标准视图动画库制作此动画,但似乎只移动了像素,但触摸贴图仍然对应于顶部片段,无法访问底部菜单片段 所以我下载了NineodelDroids库并尝试使用AnimatorSet和ObjectAnimators来制作动画。。。除了这一次,当片

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

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

为此,我在活动布局中创建了两个重叠的框架布局。我希望能够制作一个动画,背景片段将以类似于开门的方式显示,只留下顶部片段20%的边缘

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

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

这是一段代码片段,讲述了我如何实现一个简单的翻译来显示背景片段

  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();
}

为什么在使用此动画时背景片段未显示?
如何使用NineodelDroids正确地显示背景片段?

我最终解决了这个问题,使用以下代码在动画开始时使用侦听器放大背景视图

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 levels 11>和我的API 9设备上工作得很好,但我仍然遇到与标准动画库相同的问题。视图像素平移,但触摸区域保持在同一位置。因此,我无法与背景导航菜单片段交互。

这是因为std动画和NineoAndRoid都只以动画形式绘制视图,但在任何情况下,它们都不会对视图进行物理变换(只有“外观”而不是“外观”),所以我一直在计算旧API的新位置,是吗?关于如何做到这一点,有什么好的资源吗?我一直在尝试,但我不认为我很了解每个人是如何做的动画的标准方法是设置动画侦听器startAnimation()并在onAnimationEnd中将视图移动到一个新位置我知道,但当我尝试执行类似FrameLayout.LayoutParams lp=new FrameLayout.LayoutParams的操作时(myView.getWidth(),myView.getHeight());myView.setLayoutParams(lp);它似乎不起作用