工具篇——InfiniteShufflingViewPager(用於自動無限輪播的輪播圖)
阿新 • • 發佈:2019-01-30
寫程式碼的四點: 1.明確需求。要做什麼? 2.分析思路。要怎麼做?(1,2,3……) 3.確定步驟。每一個思路要用到哪些語句、方法和物件。 4.程式碼實現。用具體的語言程式碼將思路實現出來。學習新技術的四點: 1.該技術是什麼? 2.該技術有什麼特點?(使用需注意的方面) 3.該技術怎麼使用?(寫Demo) 4.該技術什麼時候用?(在Project中的使用場景 )
----------------------早計劃,早準備,早完成。-------------------------
程式碼如下:
package com.wangyang.infiniteshufflingviewpager.customview; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; /** * 用於自動無限輪播的輪播圖的ViewPager * 1.請求父控制元件及祖宗控制元件不要攔截事件;* 2.解決ScrollView和ViewPager的上下滑動衝突; * 3.當ViewPager填充的資料為1的時候,讓其不能滑動; */ public class InfiniteShufflingViewPager extends ViewPager { private int startX; private int startY; private boolean isCanScroll = true; public InfiniteShufflingViewPager(Context context) { super(context);} public InfiniteShufflingViewPager(Context context, AttributeSet attrs) { super(context, attrs); } /** * 控制ViewPager能否滑動 * 預設可以滑動(true) * * @param isCanScroll ture可以滑動,false禁止滑動 */ public void setCanScroll(boolean isCanScroll) { this.isCanScroll = isCanScroll;} /** * 1.上下滑動需要攔截; * 2.向右滑動並且當前是第一個頁面,需要攔截; * 3.向左滑動並且是最後一個頁面,需要攔截; */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { //先請求父控制元件及祖宗控制元件不要攔截事件 getParent().requestDisallowInterceptTouchEvent(true); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: startX = (int) ev.getX(); startY = (int) ev.getY(); break; case MotionEvent.ACTION_MOVE: int endX = (int) ev.getX(); int endY = (int) ev.getY(); int dx = endX - startX; int dy = endY - startY; if (Math.abs(dx) > Math.abs(dy)) { int currentItem = getCurrentItem(); //左右滑動 if (dx > 0) {//向右滑 if (currentItem == 0) { //第一個頁面,需要攔截 getParent().requestDisallowInterceptTouchEvent(false); } } else {//向左滑 //獲取item總數 int count = getAdapter().getCount(); if (currentItem == count - 1) { //最後一個頁面,需要攔截 getParent().requestDisallowInterceptTouchEvent(false); } } } else { // 上下滑動,需要攔截 getParent().requestDisallowInterceptTouchEvent(false); } break; case MotionEvent.ACTION_UP: break; } return super.dispatchTouchEvent(ev); } /** * 當資料的大小為1的時候,禁止滑動 * * @param x * @param y */ @Override public void scrollTo(int x, int y) { if (isCanScroll) { super.scrollTo(x, y); } } }
在專案中的應用:
在xml佈局檔案中直接使用;<com.wangyang.infiniteshufflingviewpager.customview.InfiniteShufflingViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="180dp" />