Android上的片段的立方体翻转动画

inn*_*nni 5 animation android android-fragments android-viewpager

我想实现一个基本的3D立方体,并在Touch上水平或垂直旋转90度.我想要实现的是类似于下图所示的内容.

我用ViewPager's 实现了这个ViewTransformer 但是我对结果不满意.动画不是很流畅,我不能翻转它,我必须将手指拖过屏幕的整个宽度来旋转立方体.我想翻转它,但我无法实现它.

在此输入图像描述在此输入图像描述

我用过BTGridPager-Android来实现上述目的.但如上所述,它不是很有说服力.

这是我的ViewTransformer代码:

    public abstract class ABaseTransformer implements PageTransformer {
 @Override
 public void transformPage(View page, float position) {
  onPreTransform(page, position);
  onTransform(page, position);
  onPostTransform(page, position);
 }
protected void onPreTransform(View page, float position) {
  final float width = page.getWidth();

  page.setRotationX(0);
  page.setRotationY(0);
  page.setRotation(0);
  page.setScaleX(1);
  page.setScaleY(1);
  page.setPivotX(0);
  page.setPivotY(0);
  page.setTranslationY(0);
  page.setTranslationX(isPagingEnabled() ? 0f : -width * position);

  if (hideOffscreenPages()) {
   page.setAlpha(position <= -1f || position >= 1f ? 0f : 1f);
  } else {
   page.setAlpha(1f);
  }
 }


public class HorizontalCubeOutTransformer extends ABaseTransformer {

 @Override
 protected void onTransform(View view, float position) {

  final float normalizedposition = Math.abs(1 - Math.abs(position));

  view.setPivotX(position < 0f ? view.getWidth() : 0f);
  view.setPivotY(view.getHeight() * 0.5f);
  view.setRotationY(90f * position);
  view.setAlpha(normalizedposition);
 }

 @Override
 public boolean isPagingEnabled() {
  return true;
 }

}



public class VerticalCubeOutTransformer extends ABaseTransformer {


 @Override
 protected void onTransform(View view, float position) {

  final float normalizedposition = Math.abs(Math.abs(position) - 1);
  view.setAlpha(normalizedposition);
  view.setTranslationX(view.getWidth() * -position);
  view.setTranslationY(position * view.getHeight());

  view.setPivotX(view.getWidth() * 0.5f);
  view.setPivotY(position < 0f ? view.getHeight() : 0f);
  view.setRotationX(90f * -position);

 }

 @Override
 public boolean isPagingEnabled() {
  return false;
 }
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是如何在翻转手势上旋转立方体.注意:我想在没有OpenGL或SurfaceView的情况下实现这一点.

更新: 到现在为止我已经使用fragmenttransactionExtended实现了立方体翻转但现在我遇到了一些其他问题,因为当翻转开始时当前片段消失了

在此输入图像描述

SHA*_*NDA 1

您可以使用 FragmentTransactionExtended

FragmentTransaction扩展

它提供了片段之间所有类型的动画