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

ViewPager在屏幕上显示下一个和前一个项目预览

寇宏义
2023-03-14

我想在屏幕中的页面预览之前显示viewpager。前一页和下一页在屏幕中显示深度,并用深度动画滑动下一页。

你可以看看这个图像

我怎么做?

共有3个答案

白才艺
2023-03-14
viewPager.setPageMargin(100);
viewPager.setPageTransformer(false, new ViewPager.PageTransformer()
{
    @Override
    public void transformPage(View page, float position)
    {
        int pageWidth = viewPager.getMeasuredWidth() -
            viewPager.getPaddingLeft() - viewPager.getPaddingRight();
        int pageHeight = viewPager.getHeight();
        int paddingLeft = viewPager.getPaddingLeft();
        float transformPos = (float) (page.getLeft() -
            (viewPager.getScrollX() + paddingLeft)) / pageWidth;
        int max = pageHeight / 10;
        if (transformPos < -1)
        {
            // [-Infinity,-1)
            // This page is way off-screen to the left.
            page.setAlpha(0.5f);// to make left transparent
            page.setScaleY(0.7f);
        }
        else if (transformPos <= 1)
        {
            // [-1,1]
            page.setScaleY(1f);
        }
        else
        {
            // (1,+Infinity]
            // This page is way off-screen to the right.
            page.setAlpha(0.5f);// to make right transparent
            page.setScaleY(0.7f);
        }
    }
});
洪星文
2023-03-14

您可以使用PagerTransformer查看寻呼机:-

mViewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
     @Override
     public void transformPage(View page, float position) {
             // do transformation here
      }
     });

使用此链接可获得完整的教程:-

http://andraskindler.com/blog/2013/create-viewpager-transitions-a-pagertransformer-example/

希望这对您有所帮助:)

公孙宇
2023-03-14

最后,我做到了:)我修改了这个类似于Android的旋转木马的小部件,它显示了左右元素的一部分

你可以看看这个代码。

//pager settings
          pager.setClipToPadding(false);
          pager.setPageMargin(24);
          pager.setPadding(48, 8, 48, 8);
          pager.setOffscreenPageLimit(3);
          pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

             @Override
             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                Log.i("", "onPageScrolled: " + position);

                CampaignPagerFragment sampleFragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(position);


                float scale = 1 - (positionOffset * RATIO_SCALE);

                // Just a shortcut to findViewById(R.id.image).setScale(scale);
                sampleFragment.scaleImage(scale);


                if (position + 1 < pager.getAdapter().getCount()) {
                   sampleFragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(position + 1);
                   scale = positionOffset * RATIO_SCALE + (1 - RATIO_SCALE);
                   sampleFragment.scaleImage(scale);
                }
             }

             @Override
             public void onPageSelected(int position) {
                Log.i("", "onPageSelected: " + position);
             }

             @Override
             public void onPageScrollStateChanged(int state) {
                Log.i("", "onPageScrollStateChanged: " + state);
                if (state == ViewPager.SCROLL_STATE_IDLE) {
                   CampaignPagerFragment fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem());
                   fragment.scaleImage(1);
                   if (pager.getCurrentItem() > 0) {
                      fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem() - 1);
                      fragment.scaleImage(1 - RATIO_SCALE);
                   }

                   if (pager.getCurrentItem() + 1 < pager.getAdapter().getCount()) {
                      fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem() + 1);
                      fragment.scaleImage(1 - RATIO_SCALE);
                   }
                }

             }
          });
//PagerAdapter

public class CampaignPagerAdapter extends FragmentStatePagerAdapter {
   SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

   public CampaignPagerAdapter(FragmentManager fm) {
      super(fm);
   }

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

   @Override
   public Fragment getItem(int position) {
      return new CampaignPagerFragment();
   }

   @Override
   public Object instantiateItem(ViewGroup container, int position) {
      Fragment fragment = (Fragment) super.instantiateItem(container, position);
      registeredFragments.put(position, fragment);
      return fragment;
   }

   @Override
   public void destroyItem(ViewGroup container, int position, Object object) {
      registeredFragments.remove(position);
      super.destroyItem(container, position, object);
   }

   public Fragment getRegisteredFragment(int position) {
      return registeredFragments.get(position);
   }
}

例如:https://github.com/mrleolink/SimpleInfiniteCarousel..

您好,有一件事是缺少sampleFragment.scale图像(规模);这是一个方法,创建在运动分页碎片,它规模的片段rootView...

e. g公共无效缩放图像(浮点缩放X){rootView.setScaleY(缩放X); rootView.invalidate (); }

 类似资料:
  • 我试图创建一个垂直轮播,显示上一个和下一个项目。 我能得到这样的东西: 肖特 风景 如您所见,横向模式已经显示下一个和项目之前。我想在竖屏中获得相同的结果。这是我使用的代码: activity_main.xml: SliderItem: 滑块适配器: 主要活动: 希望你能帮助我

  • 问题内容: 引导轮播是否可扩展以在滑块中显示下一个和上一个图像? 目前,我的轮播看起来像这样,如何将上一张和下一张图像添加到当前活动的幻灯片中? 问题答案: Bootstrap是可能的,但是需要一些自定义… 您必须使用CSS和jQuery自定义幻灯片的位置。 另一个变化是仅显示下一张和上一张幻灯片的一部分。这可以通过在.. 的左侧和右侧上放置绝对位置叠加来完成。

  • 我对编程相对较新,我试图创建一个程序,创建一个紫色的球,我点击它向右移动,直到它离开屏幕,在那里我可以一次在屏幕上有无限个球。我已经做了一个程序来做这个,但我只能有一个在屏幕上一次,如果我点击第二次,第一个球消失,被一个新的球取代。哦,当我点击第二次时,球不是从光标所在的地方开始的,而是从最后一个球在x轴上的地方开始的。救命啊! 代码如下:

  • 我有一个网格视图。单击gridview中的任何项时,我将转到一个ViewPager/FragmentStatePagerAdapter中,该ViewPager/FragmentStatePagerAdapter包含gridview的所有项。我希望视图页导航显示选定的项目。Viewpager总是加载第一个项目。如何解决这个问题? 活动: 我正在从gridview接收BuyActivity Inten

  • 最后是我的适配器类

  • 我在http://eiglaw.com上遇到了一个问题--在iPhone的屏幕右侧显示了一个大约25px宽的空白/边框。我研究了stackoverflow上的问题,这些帖子是相关的,但当我尝试提供的各种解决方案时,我都无法修复该问题: iPhone上的响应式网站-从景观到肖像旋转时不需要的空白 在iPhone Safari中呈现右白色边距的网站正文背景 缩放时页眉右侧有空白 我在iPad上也遇到过