视图分页器中的视图在上一个视图和下一个视图之间重叠

Posted

技术标签:

【中文标题】视图分页器中的视图在上一个视图和下一个视图之间重叠【英文标题】:View in the view pager overlap between previous and next view 【发布时间】:2015-12-12 22:01:20 【问题描述】:

我在我的应用程序中使用 ViewPager 来实现滑动效果。

我有 pager.setPageMargin() 让下一个和上一个视图可见,不幸的是我的下一个视图与当前视图重叠。

下面是我的代码

pager = (ViewPager) findViewById(R.id.myviewpager);

    adapter = new MyPagerAdapter(this, this.getSupportFragmentManager());
    pager.setAdapter(adapter);
    pager.setOnPageChangeListener(adapter);



    // Set current item to the middle page so we can fling to both
    // directions left and right
    pager.setCurrentItem(FIRST_PAGE);

    // Necessary or the pager will only have one extra page to show
    // make this at least however many pages you can see
    pager.setOffscreenPageLimit(10);

    // Set margin for pages as a negative number, so a part of next and 
    // previous pages will be showed

    //
    pager.setPageMargin(-450);

我在寻呼机中使用片段。 我正在获得与此线程相关的输出,但需要正确放置视图而不会重叠

上图中标记的部分应该放在中心卡的后面。

【问题讨论】:

android ViewPager - Show preview of page on left and right的可能重复 @BillyRiantono 它不是重复的,如果你看到我正在显示下一张卡片,在附图中,但下一张卡片(标记为椭圆形)覆盖在当前卡片(中心卡片)上 嗨@Suresh 你有解决方案吗? 嗨@Suresh 你有解决问题的方法 【参考方案1】:

试试这个:

    pager.setClipToPadding(false);
    pager.setPadding(50, 0, 50, 0);

代替:

    pager.setPageMargin(-450);

【讨论】:

【参考方案2】:

其实我把需要的视图放到前面了

view.bringToFront();

注意:要识别位于视图分页器当前显示页面中心的正确布局

【讨论】:

您能说一下您是如何确定位于视图寻呼机中心的正确布局的吗?【参考方案3】:
pager.setPadding(0, 0, 0, 0);
pager.setPageMargin(0, 0, 0, 0);

您只需使用 match_parent 作为 viewpaper 的高度和宽度 tks。 希望对你有用

【讨论】:

【参考方案4】:

我找到了 KitKat 后版本的解决方案。基本上我所做的是增加当前中心视图的高度。 (我仍在为棒棒糖之前的解决方案工作)

这是我的代码,将 OnPageChangeListener 设置为您的 viewpager,并在 OnPageSelected 方法中

     @Override public void onPageSelected(int position) 

      //Counter for loop
      int count = 0;
      int PAGER_LOOP_THRESHOLD = 2;
      if (position >= PAGER_LOOP_THRESHOLD) 
        count = position - PAGER_LOOP_THRESHOLD;
      
      do 
        Fragment fragment = (Fragment) adapter.instantiateItem(pager, count);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
            && fragment.getView() != null) 

          //If it's current center position, increase view's elevation. Otherwise, we reduce elevation
          if (count == position) 
            fragment.getView().setElevation(8.0f);
          
          else 
            fragment.getView().setElevation(0.0f);
          
        
        count++;
       while (count < position + PAGER_LOOP_THRESHOLD);
    

【讨论】:

【参考方案5】:

因为你正在设置 pager.setPageMargin(-450);您还需要为 ViewPage 的子片段和 pager.setClipToPadding(false) 提供 240 填充;流畅的动画效果。

如果有人还在寻找解决方案,我已经自定义了 ViewPage 以在不使用负边距的情况下实现它,请在此处找到示例项目 https://github.com/44kksharma/Android-ViewPager-Carousel-UI 它应该在大多数情况下工作,但您仍然可以定义页边距 mPager.setPageMargin(margin in pixel);

【讨论】:

以上是关于视图分页器中的视图在上一个视图和下一个视图之间重叠的主要内容,如果未能解决你的问题,请参考以下文章

如何在每个视图分页器中显示json一个[关闭]

片段被视图分页器布局切割

无法使用回收视图在 ScrollVIew/NestedScrollView 内滚动 ViewPager

UIScrollView 一个分页器

FragmentStatePagerAdapter 视图分页器片段在活动重新创建后不显示

Flutter/Firestore - 在流构建器中的动态列表视图上实现“分页”