有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我可以为ViewPager中片段的进入和退出提供不同的动画吗?

我已经创建了一个带有5个自定义动画片段的viewpager。到目前为止,这是一项容易的任务。现在挑战开始了。我必须为viewpager中的所有片段实现不同的进入和退出动画。对于每个片段进入屏幕和退出屏幕的方式,可以有不同的动画。我还没有找到任何解决办法。这就是我到目前为止所做的,但很明显,它只显示了一个动画

在活动中

mViewPager.setPageTransformer(false, new ViewPagerAnimation(ViewPagerAnimation
                .AnimationType.FLIP)); 

在ViewPagerAnimation类中

public class ViewPagerAnimation implements ViewPager.PageTransformer {

  public enum AnimationType {
    FLIP,
    SCALE_IN_OUT
  }

  private static final float MIN_SCALE_DEPTH = 0.75f;
  private static final float MIN_SCALE_ZOOM = 0.85f;
  private static final float MIN_ALPHA_ZOOM = 0.5f;
  private static final float SCALE_FACTOR_SLIDE = 0.85f;
  private static final float MIN_ALPHA_SLIDE = 0.35f;
  private static final float MIN_FLIP_CUBE_PIVOT = 0.5f;
  private static final float MIN_FLOW_ROTATION = 30f;

  private final AnimationType mAnimationType;

  public ViewPagerAnimation(AnimationType animationType) {
    mAnimationType = animationType;
  }

  public void transformPage(View pageView, float position) {

    switch (mAnimationType) {
      case FLIP:
        setFlipAnimation(pageView, position);
        break;
      case SCALE_IN_OUT:
        setScaleInOutAnimation(pageView, position);
        break;
      default:
    }
  }

  private void setFlipAnimation(View pageView, float position) {
    final float rotation = 180f * position;

    pageView.setAlpha(rotation > 90f || rotation < -90f ? 0 : 1);
    pageView.setPivotX(pageView.getWidth() * MIN_FLIP_CUBE_PIVOT);
    pageView.setPivotY(pageView.getHeight() * MIN_FLIP_CUBE_PIVOT);
    pageView.setRotationY(rotation);
  }

  private void setScaleInOutAnimation(View pageView, float position) {
    pageView.setPivotX(position < 0 ? 0 : pageView.getWidth());
    pageView.setPivotY(pageView.getHeight() / 2f);
    float scale = position < 0 ? 1f + position : 1f - position;
    pageView.setScaleX(scale);
    pageView.setScaleY(scale);
  }

}

共 (0) 个答案