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

5
我希望能够实现一个基本的3D立方体,并通过触摸将其水平或垂直旋转90度。我想要实现的是与下图类似的效果。
我已经使用ViewPager的ViewTransformer实现了这一点,但是我对结果不满意。动画不是很流畅,而且我无法翻转它,必须在整个屏幕宽度上拖动手指才能旋转立方体。我只想翻转它,但是无法实现。

enter image description hereenter image description here

我已经使用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;
 }
}

我想知道如何在翻转手势中旋转立方体,但不想使用OpenGL或SurfaceView实现。
更新:目前我已经使用FragmentTransactionExtended实现了立方体翻转,但现在遇到了其他问题,即当前片段在翻转开始时就消失了。

enter image description here

1个回答

1
你可以使用FragmentTransactionExtended。
它提供了所有类型的片段之间的动画效果。
GitHub地址:https://github.com/DesarrolloAntonio/FragmentTransactionExtended

嗨,Shashidhar,是否可以同时进行水平和垂直方向的操作? - Ganesh Katikar
我从未这样做过,但你可以查看源代码并结合那些动画。 - SHASHIDHAR MANCHUKONDA
嘿@SHASHIDHARMANCHUKONDA,我已经使用FragmentTransactionExtended实现了类似于立方体的事务,但现在的问题是,在执行事务时,当前片段在事务开始之前被销毁,而下一个片段运行良好(事务看起来像下一个片段以立方体方式滚动)。 - inni
@inni 我也想尝试制作一个碎片的立方体。你能分享一下你是如何实现垂直翻转的吗?FragmentTransactionExtended 只支持水平翻转。另外,你可以使用 Bundle 来保存实例状态并在以后加载它。 - Brandacus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接