我正在尝试执行一个动画,其中我有两个片段堆叠在一起。
顶部片段是细节片段。 底部片段是菜单列表视图片段。
我是通过在活动布局中创建两个重叠的framelayout来实现的。我希望能够制作一个动画,其中背景片段将以类似于门开启的方式显示,只留下顶部片段边缘的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正确显示背景片段?
答案 0 :(得分: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设备上,我仍然遇到与标准动画库相同的问题。视图像素转换但触摸区域保持映射在同一位置。所以我无法与后台导航菜单片段进行交互。