当前位置: 首页 > 知识库问答 >
问题:

垂直浏览。停止滚动到某一点

宋典
2023-03-14

我创建了一个垂直的ViewPager,使用ViewPage.PageTransformer并交换X和Y坐标。(我使用这种方法)

现在,我想让它做的是在某一点停止滚动(我想让最后一个视图只占屏幕高度的65%,但全宽)。通常,在这种情况下,我会覆盖< code>getPageWidth(),但是由于我的宽度和高度现在有点混淆,当我这样做时,我的视图占据了屏幕高度和宽度的65%。

那么我应该如何解决这个问题呢?

谢谢!

MyViewPager.java

public class MyViewPager extends ViewPager {

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

    private void init() {
        setPageTransformer(true, new VerticalPageTransformer());
        setOverScrollMode(OVER_SCROLL_NEVER);
    }

    private class VerticalPageTransformer implements ViewPager.PageTransformer {

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

            if (position < -1) {
                view.setAlpha(0);

            } else if (position <= 1) {
                view.setAlpha(1);

                view.setTranslationX(view.getWidth() * -position);

                float yPosition = position * view.getHeight();
                view.setTranslationY(yPosition);

            } else {
                view.setAlpha(0);
            }
        }
    }

    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 onTouchEvent(MotionEvent ev) {
        return super.onTouchEvent(swapXY(ev));
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev){
        boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
        swapXY(ev);
        return intercepted;
    }
}

MyPagerAdapter.java

public class MyPagerAdapter extends PagerAdapter {

    private Context context;
    private LayoutInflater layoutInflater;

    public MyPagerAdapter(Context context) {
        this.context = context;
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, final int position) {

        if (position == 0) {
            View view = layoutInflater.inflate(R.layout.item_profile_picture, container, false);

            container.addView(view);
            return view;
        }

        else {
            View view = layoutInflater.inflate(R.layout.item_profile_info, container, false);

            container.addView(view);
            return view;
        }

    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((FrameLayout) object);
    }

    @Override
    public float getPageWidth(int position) {
        if (position == 1) return (0.65f);
        return super.getPageWidth(position);
    }

}

共有2个答案

韩涵衍
2023-03-14

使用这个库解决了这个问题。

束敏学
2023-03-14

嗨,据我所知,你正试图在某个点停下来,而没有过卷。将overscroll(从不)方法添加到所需的viewpager。并管理对象上的边距。尽可能多地包装内容。

 类似资料:
  • 问题内容: 我想始终在网页中显示垂直滚动条。是否可以使用javascript?我认为可以使用javascript或jQuery。我要垂直滚动条是否有足够的内容来显示或不显示。 谢谢。 问题答案: 不需要jQuery。您可以尝试添加CSS: 这适用于最新的浏览器,甚至IE6。

  • 我对Vert.x非常陌生,就像几天前一样。我来自一个JAX式的,安逸的世界。我可能大错特错,请指正。 我的问题是:如何使顶点公开自己的REST接口(子路由器),以及如何将其子路由器注册到应用程序的主路由器中? 我尝试过类似的东西,但是当我请求/产品/所有:( } }

  • 问题内容: 我想增加一种滚动菜单项的方法,就像滚动滚动菜单项的列表一样。 假设我有10个菜单项。我想一次只显示5个菜单项,并且我会使用底部或顶部的垂直滚动按钮来显示未列出的菜单项并隐藏我刚刚看到的菜单项。 可能吗?我正在使用JIDE软件的,单击时会显示。我试图保持放置命令栏的外观,因此除非确实需要,否则我不想将其替换为。 问题答案: 可能是这个 http://www.javabeginner.co

  • 假设我有一个类似这样的竖线(有意简化以便于解释我的问题)。 现在想象一下,MyService是事件驱动的,当服务中发生某些事件时,我想停止顶点。 是否有人对Vert有更多经验。x知道如何做到这一点?或者,也许有人会给我一些建议,告诉我什么是正确的替代方法?

  • 我想添加一种在中滚动菜单项的方法,就像在中滚动项列表一样。 假设我有10个菜单项。我希望一次只显示5个菜单项,我将使用底部或顶部的垂直滚动按钮来显示未列出的菜单项,并隐藏刚才看到的菜单项。 有可能吗?我使用的是JIDE软件的,点击它时会显示。我试图保持放置的命令栏的外观,因此除非真的有必要,否则我不想用替换它。

  • 问题内容: 如果转到页面a并滚动浏览,则刷新页面将在您离开页面的位置刷新。这很好,但是在URL中存在锚点位置的页面上也会发生这种情况。例如,如果您单击一个链接并在环顾四周后刷新页面,您将不会处于锚点,而页面会跳来跳去。有什么办法可以防止使用javascript吗?因此,无论如何,您始终可以导航到锚点。 问题答案: 由于浏览器行为的更改,不再建议使用此解决方案。查看其他答案。 基本上,如果使用锚,则