ViewPager各種騷操作,說不定你可以用上

ViewPager在項目開發(fā)的用得很是頻繁,在平時的項目中,我也總結(jié)了一些產(chǎn)品經(jīng)理可能要求要的一些關(guān)于ViewPager的特殊效果,特在此總結(jié)一下,以備以后的不時之需。

github代碼直通車

1. 3D畫廊效果
2.相互連接顯示效果
3.水滴指示器效果
4.動態(tài)設(shè)置是否可滾動效果
1. 3D畫廊效果

關(guān)鍵點:給viewpager設(shè)置一個滑動轉(zhuǎn)化器,做按角度進行縮放。

public class RotationPageTransformer implements ViewPager.PageTransformer {
    private static final float MIN_SCALE = 0.85f;

    @Override
    public void transformPage(View page, float position) {
        float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
        float rotate = 10 * Math.abs(position);
        //position小于等于1的時候,代表page已經(jīng)位于中心item的最左邊,
        //此時設(shè)置為最小的縮放率以及最大的旋轉(zhuǎn)度數(shù)
        if (position <= -1) {
            page.setScaleX(MIN_SCALE);
            page.setScaleY(MIN_SCALE);
            page.setRotationY(rotate);
        } else if (position < 0) {//position從0變化到-1,page逐漸向左滑動
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
            page.setRotationY(rotate);
        } else if (position >= 0 && position < 1) {//position從0變化到1,page逐漸向右滑動
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
            page.setRotationY(-rotate);
        } else if (position >= 1) {//position大于等于1的時候,代表page已經(jīng)位于中心item的最右邊
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
            page.setRotationY(-rotate);
        }
    }
}
2.相互連接顯示效果

關(guān)鍵點:給viewpager及其父容器設(shè)置android:clipChildren="false",讓父容器不限制子view的大小,讓其可以超出父view顯示。然后設(shè)置一個viewPager.setPageMargin(50),這個margin數(shù)值可以根據(jù)需要漏出的寬度來調(diào)節(jié)。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".gallery.GalleryActivity"
    android:clipChildren="false">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="40dp"
        android:clipChildren="false"/>

</RelativeLayout>
3.水滴指示器效果

關(guān)鍵點:使用的是DropIndicator這個自定義ViewGroup。

4.動態(tài)設(shè)置是否可滾動效果

關(guān)鍵點:設(shè)置一個變量,判斷在onTouchEvent是否需要處理viewpager的滑動事件。

public class ScrollableViewPager extends ViewPager {

    private boolean scrollable = true;

    public ScrollableViewPager(Context context) {
        super(context);
    }

    public ScrollableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        if (!scrollable) {
            return false;
        }

        return super.onTouchEvent(ev);
    }

    public boolean isCanScrollble() {
        return scrollable;
    }

    public void setCanScrollble(boolean scrollble) {
        this.scrollable = scrollble;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,201評論 4 61
  • Android UI相關(guān)開源項目庫匯總OpenDigg 抽屜菜單MaterialDrawer ★7337 - 安卓...
    黃海佳閱讀 8,825評論 3 77
  • 今天繼續(xù)進行愛的冥想練習,沒進行前各種心理活動猶豫今天是繼續(xù)練習愛的冥想,還是換個別的內(nèi)容進行冥想,拿起手機的那一...
    佳佳1014閱讀 421評論 0 1
  • 二階段 片斷四 【R】《自控力》p178“你的折扣率是多少”中的一部分: 給“未來的回報”打折是人的天性,有些...
    鳳鳳雷閱讀 256評論 4 0
  • 別人怎么看你不重要,唯一重要的是你很喜歡真實的自己。 不要在最美好的年華里辜負自己,你自己的努力你自己可以看得見,...
    P尐c閱讀 416評論 2 2

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