gpt4 book ai didi

使用 PagerAdapter 中的 getPageWidth 时,Android ViewPager 滚动问题只有一项

转载 作者:IT老高 更新时间:2023-10-28 23:31:56 25 4
gpt4 key购买 nike

我有一个带有自定义 PagerAdapter 的 ViewPager,它覆盖方法 getPageWidth 以返回 0.3f,因此我可以在屏幕上显示多个页面,如下面的博客中所建议的:

http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

在这种情况下,ViewPager 开始为空,用户开始按请求填充页面(图像)。图像从左到右填充。一切正常,页面是动态创建的,当有多个图像时,很容易在它们之间滑动。

但是当实例化的页面少于三个时就会出现问题。从右(无内容)向左滑动手势会产生闪烁,页面交替地从左向右移动,就好像 ViewPager 试图将第一页向右移动但后来又转向其原始位置。这发生在整个手势期间,并在离开手势时停止。正如我所说,当页面足以覆盖整个屏幕宽度并且需要真正的滚动时,不会发生这种情况。

有什么想法吗?

最佳答案

我知道这是一个老问题,但我只是在寻找解决方案并遇到了 this link (奇怪地引用了这个问题)。无论如何,我能够根据他们的评论找出解决方案。基本思想是允许基于您设置的 bool 标志状态的触摸事件。

  1. 在覆盖 onInterceptTouchEvent 和 onTouchEvent 时扩展 ViewPager 以仅在设置标志时调用 super。我的类(class)是这样的:

    public class MyViewPager extends ViewPager {

    private boolean isPagingEnabled = false;

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

    public MyViewPager(Context context) {
    super(context);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
    if (isPagingEnabled) {
    return super.onInterceptTouchEvent(event);
    }
    return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    if (isPagingEnabled) {
    return super.onTouchEvent(event);
    }
    return false;
    }

    public void setPagingEnabled(boolean pagingEnabled) {
    isPagingEnabled = pagingEnabled;
    }
    }
  2. 在您的布局 xml 中,将您的 com.android.support.v4.ViewPager 元素替换为 com.yourpackage.MyViewPager 元素。

  3. 由于您在寻呼机适配器中从 getPageWidth() 返回 0.3f,因此您希望在添加第四项时启用滚动。棘手的部分是当您定义寻呼机适配器时,到处都有这行代码,并在适配器后备列表中添加或删除任何对象。

    mPager.setPagingEnabled(items.size() > 3);

关于使用 PagerAdapter 中的 getPageWidth 时,Android ViewPager 滚动问题只有一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18462391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com