爱奇艺Banner效果

爱奇艺Banner效果_第1张图片
爱奇艺Banner.png

一、显示多个page页面(2种方法)

方法1:ViewPager设置外边距+android:clipChildren="false"

 

注意:父布局也要添加 android:clipChildren="false"属性

方法2: ViewPager设置内边距+android:clipToPadding="false" 属性

 

android:clipChildren的意思:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩
android:clipToPadding的意思:是否在padding内绘制控件,默认ture

  1. ViewPager设置外边距
    
  1. ViewPager添加 android:clipChildren="false" 属性
  2. ViewPager父布局添加 android:clipChildren="false" 属性

android:clipChildren的意思:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩

二、ViewPager设置

        //表示设置page之间的间距
        mViewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));
        //表示设置缓存,这样左右拖动即可看见后面的page
        mViewPager.setOffscreenPageLimit(2);//这里必须大于2,否则能看到边侧页面加载的bug

三、所有页面都有滑动时间(默认只有中间的有滑动事件)

   mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                // to refresh frameLayout
                if (mViewPagerPanent != null) {
                    mViewPagerPanent.invalidate();
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        mViewPagerPanent.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // dispatch the events to the ViewPager, to solve the problem that we can swipe only the middle view.
                return mViewPager.dispatchTouchEvent(event);
            }
        });

可能运行后出现viewpager的部分page页面无法看见或是突然消失的问题。

  • 1、请确保ViewPager和父布局的android:clipChildren都设置为了false并且
  • 2、viewPager.setOffscreenPageLimit(count);其中count大于0。
  • 3、viewpager设置了paddingTop也会导致无法实现画廊而只是显示一屏。

你可能感兴趣的:(爱奇艺Banner效果)