|
@@ -19,14 +19,12 @@ import android.widget.RelativeLayout;
|
|
|
|
|
|
import com.zhpan.bannerview.annotation.AIndicatorGravity;
|
|
|
import com.zhpan.bannerview.annotation.APageStyle;
|
|
|
-import com.zhpan.bannerview.annotation.ATransformerStyle;
|
|
|
import com.zhpan.bannerview.annotation.Visibility;
|
|
|
import com.zhpan.bannerview.constants.PageStyle;
|
|
|
import com.zhpan.bannerview.manager.BannerManager;
|
|
|
import com.zhpan.bannerview.manager.BannerOptions;
|
|
|
import com.zhpan.bannerview.provider.ProxyLayoutManger;
|
|
|
import com.zhpan.bannerview.transform.OverlapPageTransformer;
|
|
|
-import com.zhpan.bannerview.transform.PageTransformerFactory;
|
|
|
import com.zhpan.bannerview.transform.ScaleInTransformer;
|
|
|
import com.zhpan.bannerview.utils.BannerUtils;
|
|
|
import com.zhpan.bannerview.provider.ViewStyleSetter;
|
|
@@ -172,37 +170,36 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
|
|
|
case MotionEvent.ACTION_DOWN:
|
|
|
setLooping(true);
|
|
|
stopLoop();
|
|
|
- startX = (int) ev.getX();
|
|
|
- startY = (int) ev.getY();
|
|
|
- getParent().requestDisallowInterceptTouchEvent(true);
|
|
|
break;
|
|
|
case MotionEvent.ACTION_UP:
|
|
|
case MotionEvent.ACTION_CANCEL:
|
|
|
- setLooping(false);
|
|
|
- startLoop();
|
|
|
- getParent().requestDisallowInterceptTouchEvent(false);
|
|
|
- break;
|
|
|
case MotionEvent.ACTION_OUTSIDE:
|
|
|
setLooping(false);
|
|
|
startLoop();
|
|
|
break;
|
|
|
}
|
|
|
- int orientation = mBannerManager.bannerOptions().getOrientation();
|
|
|
- if (orientation == ViewPager2.ORIENTATION_VERTICAL) {
|
|
|
- dispatchVerticalTouchEvent(ev);
|
|
|
- } else if (orientation == ViewPager2.ORIENTATION_HORIZONTAL) {
|
|
|
- dispatchHorizontalTouchEvent(ev);
|
|
|
- }
|
|
|
return super.dispatchTouchEvent(ev);
|
|
|
}
|
|
|
|
|
|
- private void dispatchHorizontalTouchEvent(MotionEvent ev) {
|
|
|
+ @Override
|
|
|
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
|
|
|
switch (ev.getAction()) {
|
|
|
case MotionEvent.ACTION_DOWN:
|
|
|
+ startX = (int) ev.getX();
|
|
|
+ startY = (int) ev.getY();
|
|
|
getParent().requestDisallowInterceptTouchEvent(true);
|
|
|
break;
|
|
|
case MotionEvent.ACTION_MOVE:
|
|
|
- onActionMove(ev);
|
|
|
+ int endX = (int) ev.getX();
|
|
|
+ int endY = (int) ev.getY();
|
|
|
+ int disX = Math.abs(endX - startX);
|
|
|
+ int disY = Math.abs(endY - startY);
|
|
|
+ int orientation = mBannerManager.bannerOptions().getOrientation();
|
|
|
+ if (orientation == ViewPager2.ORIENTATION_VERTICAL) {
|
|
|
+ onVerticalActionMove(endY, disX, disY);
|
|
|
+ } else if (orientation == ViewPager2.ORIENTATION_HORIZONTAL) {
|
|
|
+ onHorizontalActionMove(endX, disX, disY);
|
|
|
+ }
|
|
|
break;
|
|
|
case MotionEvent.ACTION_UP:
|
|
|
case MotionEvent.ACTION_CANCEL:
|
|
@@ -211,38 +208,28 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
|
|
|
case MotionEvent.ACTION_OUTSIDE:
|
|
|
break;
|
|
|
}
|
|
|
+ return super.onInterceptTouchEvent(ev);
|
|
|
}
|
|
|
|
|
|
- private void dispatchVerticalTouchEvent(MotionEvent ev) {
|
|
|
- switch (ev.getAction()) {
|
|
|
- case MotionEvent.ACTION_DOWN:
|
|
|
- getParent().requestDisallowInterceptTouchEvent(false);
|
|
|
- break;
|
|
|
- case MotionEvent.ACTION_MOVE:
|
|
|
- int endX = (int) ev.getX();
|
|
|
- int endY = (int) ev.getY();
|
|
|
- int disX = Math.abs(endX - startX);
|
|
|
- int disY = Math.abs(endY - startY);
|
|
|
- if (disX > disY) {
|
|
|
+ private void onVerticalActionMove(int endY, int disX, int disY) {
|
|
|
+ if (disY > disX) {
|
|
|
+ if (!isCanLoop()) {
|
|
|
+ if (currentPosition == 0 && endY - startY > 0) {
|
|
|
+ getParent().requestDisallowInterceptTouchEvent(false);
|
|
|
+ } else if (currentPosition == getData().size() - 1 && endY - startY < 0) {
|
|
|
getParent().requestDisallowInterceptTouchEvent(false);
|
|
|
} else {
|
|
|
getParent().requestDisallowInterceptTouchEvent(true);
|
|
|
}
|
|
|
- break;
|
|
|
- case MotionEvent.ACTION_UP:
|
|
|
- case MotionEvent.ACTION_CANCEL:
|
|
|
+ } else {
|
|
|
getParent().requestDisallowInterceptTouchEvent(true);
|
|
|
- break;
|
|
|
- case MotionEvent.ACTION_OUTSIDE:
|
|
|
- break;
|
|
|
+ }
|
|
|
+ } else if (disX > disY) {
|
|
|
+ getParent().requestDisallowInterceptTouchEvent(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void onActionMove(MotionEvent ev) {
|
|
|
- int endX = (int) ev.getX();
|
|
|
- int endY = (int) ev.getY();
|
|
|
- int disX = Math.abs(endX - startX);
|
|
|
- int disY = Math.abs(endY - startY);
|
|
|
+ private void onHorizontalActionMove(int endX, int disX, int disY) {
|
|
|
if (disX > disY) {
|
|
|
if (!isCanLoop()) {
|
|
|
if (currentPosition == 0 && endX - startX > 0) {
|
|
@@ -255,7 +242,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
|
|
|
} else {
|
|
|
getParent().requestDisallowInterceptTouchEvent(true);
|
|
|
}
|
|
|
- } else if (2 * disX < disY) {
|
|
|
+ } else if (disY > disX) {
|
|
|
getParent().requestDisallowInterceptTouchEvent(false);
|
|
|
}
|
|
|
}
|
|
@@ -342,7 +329,8 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
|
|
|
throw new NullPointerException("You must set adapter for BannerViewPager");
|
|
|
}
|
|
|
BannerOptions bannerOptions = mBannerManager.bannerOptions();
|
|
|
- ProxyLayoutManger.setScrollProxy(mViewPager, bannerOptions.getScrollDuration());
|
|
|
+ if (bannerOptions.getScrollDuration() != 0)
|
|
|
+ ProxyLayoutManger.setScrollProxy(mViewPager, bannerOptions.getScrollDuration());
|
|
|
currentPosition = 0;
|
|
|
mBannerPagerAdapter.setCanLoop(isCanLoop());
|
|
|
mBannerPagerAdapter.setPageClickListener(mOnPageClickListener);
|
|
@@ -512,37 +500,23 @@ public class BannerViewPager<T, VH extends BaseViewHolder> extends RelativeLayou
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- * PageTransformer Style.
|
|
|
- *
|
|
|
- * @param style PageTransformerStyle
|
|
|
- * @see com.zhpan.bannerview.constants.TransformerStyle#NONE
|
|
|
- * @see com.zhpan.bannerview.constants.TransformerStyle#DEPTH
|
|
|
- * @see com.zhpan.bannerview.constants.TransformerStyle#SCALE_IN
|
|
|
- * @see com.zhpan.bannerview.constants.TransformerStyle#STACK
|
|
|
- * @see com.zhpan.bannerview.constants.TransformerStyle#ROTATE
|
|
|
- * @see com.zhpan.bannerview.constants.TransformerStyle#ACCORDION
|
|
|
- */
|
|
|
- public BannerViewPager<T, VH> setPageTransformerStyle(@ATransformerStyle int style) {
|
|
|
- mViewPager.setPageTransformer(new PageTransformerFactory().createPageTransformer(style));
|
|
|
- return this;
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
* @param transformer PageTransformer that will modify each page's animation properties
|
|
|
*/
|
|
|
- public void setPageTransformer(@Nullable ViewPager2.PageTransformer transformer) {
|
|
|
+ public BannerViewPager<T, VH> setPageTransformer(@Nullable ViewPager2.PageTransformer transformer) {
|
|
|
if (transformer != null)
|
|
|
mViewPager.setPageTransformer(transformer);
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
|
|
|
* @param transformer PageTransformer that will modify each page's animation properties
|
|
|
*/
|
|
|
- public void addPageTransformer(@Nullable ViewPager2.PageTransformer transformer) {
|
|
|
+ public BannerViewPager<T, VH> addPageTransformer(@Nullable ViewPager2.PageTransformer transformer) {
|
|
|
if (transformer != null) {
|
|
|
mCompositePageTransformer.addTransformer(transformer);
|
|
|
}
|
|
|
+ return this;
|
|
|
}
|
|
|
|
|
|
public void removeTransformer(@Nullable ViewPager2.PageTransformer transformer) {
|