我希望能够实现一个基本的3D立方体,并通过触摸将其水平或垂直旋转90度。我想要实现的是与下图类似的效果。
我已经使用ViewPager的ViewTransformer实现了这一点,但是我对结果不满意。动画不是很流畅,而且我无法翻转它,必须在整个屏幕宽度上拖动手指才能旋转立方体。我只想翻转它,但是无法实现。
以下是我的ViewTransformer代码:
我想知道如何在翻转手势中旋转立方体,但不想使用OpenGL或SurfaceView实现。
更新:目前我已经使用FragmentTransactionExtended实现了立方体翻转,但现在遇到了其他问题,即当前片段在翻转开始时就消失了。
我已经使用ViewPager的ViewTransformer实现了这一点,但是我对结果不满意。动画不是很流畅,而且我无法翻转它,必须在整个屏幕宽度上拖动手指才能旋转立方体。我只想翻转它,但是无法实现。
以下是我的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实现了立方体翻转,但现在遇到了其他问题,即当前片段在翻转开始时就消失了。