寫代碼的四點: 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" />
附:
詳情使用Demo(https://blog.csdn.net/qq941263013/article/details/80988321)
---------------------------------------------------------------------------------------------------------------------------
早計劃,早準備,早完成。 歡迎關注!交流!Star!
GitHub:https://github.com/wangyang0313
微信公衆号:一個靈活的胖子MrWang
簡書:https://www.jianshu.com/u/e5e733d79b96