1. 程式人生 > >工具篇——InfiniteShufflingViewPager(用於自動無限輪播的輪播圖)

工具篇——InfiniteShufflingViewPager(用於自動無限輪播的輪播圖)

寫程式碼的四點:     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" />

附: