愛奇藝Banner效果

愛奇藝Banner.png

一、顯示多個(gè)page頁面(2種方法)

方法1:ViewPager設(shè)置外邊距+android:clipChildren="false"

 <android.support.v4.view.ViewPager
        ...
        android:clipChildren="false"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"/>

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

方法2: ViewPager設(shè)置內(nèi)邊距+android:clipToPadding="false" 屬性

 <android.support.v4.view.ViewPager
        ...
        android:clipToPadding="false"
        android:paddingLeft="30dp"
        android:paddingRight="30dp"/>

android:clipChildren的意思:是否限制子View在其范圍內(nèi),我們將其值設(shè)置為false后那么當(dāng)子控件的高度高于父控件時(shí)也會(huì)完全顯示,而不會(huì)被壓縮
android:clipToPadding的意思:是否在padding內(nèi)繪制控件,默認(rèn)ture

  1. ViewPager設(shè)置外邊距
    <android.support.v4.view.ViewPager
        ...
        android:clipToPadding="false"
        android:clipChildren="false"
        android:paddingLeft="30dp"
        android:paddingRight="30dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"/>
  1. ViewPager添加 android:clipChildren="false" 屬性
  2. ViewPager父布局添加 android:clipChildren="false" 屬性

android:clipChildren的意思:是否限制子View在其范圍內(nèi),我們將其值設(shè)置為false后那么當(dāng)子控件的高度高于父控件時(shí)也會(huì)完全顯示,而不會(huì)被壓縮

二、ViewPager設(shè)置

        //表示設(shè)置page之間的間距
        mViewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));
        //表示設(shè)置緩存,這樣左右拖動(dòng)即可看見后面的page
        mViewPager.setOffscreenPageLimit(2);//這里必須大于2,否則能看到邊側(cè)頁面加載的bug

三、所有頁面都有滑動(dòng)時(shí)間(默認(rèn)只有中間的有滑動(dòng)事件)

   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);
            }
        });

可能運(yùn)行后出現(xiàn)viewpager的部分page頁面無法看見或是突然消失的問題。

  • 1、請(qǐng)確保ViewPager和父布局的android:clipChildren都設(shè)置為了false并且
  • 2、viewPager.setOffscreenPageLimit(count);其中count大于0。
  • 3、viewpager設(shè)置了paddingTop也會(huì)導(dǎo)致無法實(shí)現(xiàn)畫廊而只是顯示一屏。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容