Cube Flip анимация для фрагментов на Android

Я хочу реализовать базовый 3d-куб и повернуть его на 90 градусов по горизонтали или по вертикали на Touch. Я хочу реализовать нечто похожее на то, что показано на рисунке ниже.

Я достиг этого, используя ViewPager"s ViewTransformer Но я не доволен результатом. Анимация не очень плавная, и я не могу ее перевернуть, мне нужно провести пальцем по всей ширине экрана, чтобы повернуть куб. Я хочу просто перевернуть это, но не могу этого достичь.

Я использовал https://github.com/btate/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.

ОБНОВЛЕНИЕ: до сих пор я реализовал переворот куба, используя fragtransactionExtended, но теперь у меня возникла другая проблема, так как текущий фрагмент исчезает, как только переворот начинается

1 ответ

Вы можете использовать FragmentTransactionExtended

https://github.com/DesarrolloAntonio/FragmentTransactionExtended

он обеспечивает все виды анимации между подразделениями

Другие вопросы по тегам