android - android中的垂直 View 寻呼机动画

标签 android android-viewpager

我是 android 的新手,我试图用缩小页面转换器实现垂直 View 寻呼机我的垂直 View 寻呼机工作正常当我来缩小页面转换器时它会水平滚动,而不是垂直滚动

我的垂直 View 寻呼机类 VerticalViewPager.class

public class VerticalViewPager extends ViewPager {
public VerticalViewPager(Context context) {
    super(context);
    init();
}

public VerticalViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

private void init() {
    // The majority of the magic happens here
    setPageTransformer(true, new VerticalPageTransformer());
    // The easiest way to get rid of the overscroll drawing that happens on the left and right
    setOverScrollMode(OVER_SCROLL_NEVER);
}

private class VerticalPageTransformer implements ViewPager.PageTransformer {

    @Override
    public void transformPage(View view, float position) {

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);

        } else if (position <= 1) { // [-1,1]
            view.setAlpha(1);

            // Counteract the default slide transition
            view.setTranslationX(view.getWidth() * -position);

            //set Y position to swipe in from top
            float yPosition = position * view.getHeight();
            view.setTranslationY(yPosition);

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }
}

/**
 * Swaps the X and Y coordinates of your touch event.
 */
private MotionEvent swapXY(MotionEvent ev) {
    float width = getWidth();
    float height = getHeight();

    float newX = (ev.getY() / height) * width;
    float newY = (ev.getX() / width) * height;

    ev.setLocation(newX, newY);

    return ev;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
    boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
    swapXY(ev); // return touch coordinates to original reference frame for any child views
    return intercepted;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    return super.onTouchEvent(swapXY(ev));
}

}

我的缩小动画类 AnimationViewPager.class

public class AnimationViewPager implements VerticalViewPager.PageTransformer {

private static final float MIN_SCALE = 0.75f;

public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();

    if (position < -1) { // [-Infinity,-1)
        // This page is way off-screen to the left.
        view.setAlpha(0);

    } else if (position <= 0) { // [-1,0]
        // Use the default slide transition when moving to the left page

        view.setAlpha(1);
        view.setTranslationX(0);
        view.setScaleX(1);
        view.setScaleY(1);

    } else if (position <= 1) { // (0,1]
        // Fade the page out.
        view.setAlpha(1 - position);

        // Counteract the default slide transition
        view.setTranslationX(pageWidth * -position);
        // Scale the page down (between MIN_SCALE and 1)
        float scaleFactor = MIN_SCALE
                + (1 - MIN_SCALE) * (1 - Math.abs(position));
        view.setScaleX(scaleFactor);
        view.setScaleY(scaleFactor);

    } else { // (1,+Infinity]
        // This page is way off-screen to the right.
        view.setAlpha(0);
    }
}


}

这是我的示例图片,我想喜欢这个,请任何人帮助我如何获得这个

enter image description here

最佳答案

首先使用这个库。它是最接近开箱即用的, 链接如下 github.com/castorflex/VerticalViewPager

然后新建一个类

public class DepthPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.75f;

public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();

    if (position < -1) { // [-Infinity,-1)
        // This page is way off-screen to the left.
        view.setAlpha(0);

    } else if (position <= 0) { // [-1,0]
        // Use the default slide transition when moving to the left page
        view.setAlpha(1);
        view.setTranslationX(0);
        view.setScaleX(1);
        view.setScaleY(1);

    } else if (position <= 1) { // (0,1]
        // Fade the page out.
        view.setAlpha(1 - position);

        // Counteract the default slide transition
        view.setTranslationX(pageWidth * -position);

        // Scale the page down (between MIN_SCALE and 1)
        float scaleFactor = MIN_SCALE
                + (1 - MIN_SCALE) * (1 - Math.abs(position));
        view.setScaleX(scaleFactor);
        view.setScaleY(scaleFactor);

    } else { // (1,+Infinity]
        // This page is way off-screen to the right.
        view.setAlpha(0);
    }
}
}

在您的 mainactivity 类中,像这样在 verticalviewpager 类上设置动画

     verticalViewPager=(VerticalViewPager)findViewById(R.id.verticalview);

     verticalViewPager.setPageTransformer(false,new DepthPageTransformer());
     verticalViewPager.setAdapter(pager);

就是这样,谢谢,请评价我的回答:)

关于android - android中的垂直 View 寻呼机动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34460577/

相关文章:

java - 导入cordova项目后Android Studio aapt.exe丢失错误消息

android - 在 ViewPager 中动态添加和删除 fragment

android - 一个 viewpager 页面中的两个 fragment

android - Horizo​​ntalScrollView 还是 Carrousel?

android - 如何检查 WiFi 或数据连接是否已打开但是否可以访问互联网

android - 在布局层次结构中覆盖在 YouTubePlayerFragment 或 YouTubePlayerView 上方的 View 会导致播放立即暂停

android - 使用 okhttp 从资源上传二进制文件

Java从字符串中删除公钥页眉和页脚

android - 在 fragment 中使用 fragment

android - ViewPager + Fragments + 使用按钮更改页面