【问题标题】: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);

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

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

【问题讨论】:

  • @BillyRiantono 它不是重复的,如果你看到我正在显示下一张卡片,在附图中,但下一张卡片(标记为椭圆形)覆盖在当前卡片(中心卡片)上
  • 嗨@Suresh 你有解决方案吗?
  • 嗨@Suresh 你有解决问题的方法

标签: android android-layout android-fragments android-viewpager fragment


【解决方案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);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-31
          • 2011-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多