package ar.rulosoft.mimanganu.componentes;
import android.content.Context;
import android.support.v4.view.MotionEventCompat;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import ar.rulosoft.mimanganu.componentes.readers.paged.PagedReader;
public class UnScrolledViewPager extends ViewPager {
public UnScrolledViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
static final int MIN_DISTANCE = 200;
static final int MAX_TIME = 200;
float mStartDragX;
long mStartTime;
OnSwipeOutListener mOnSwipeOutListener;
public void setOnSwipeOutListener(OnSwipeOutListener listener) {
mOnSwipeOutListener = listener;
}
private void onSwipeOutAtStart() {
if (mOnSwipeOutListener != null) {
mOnSwipeOutListener.onStartOver();
}
}
private void onSwipeOutAtEnd() {
if (mOnSwipeOutListener != null) {
mOnSwipeOutListener.onEndOver();
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction() & MotionEventCompat.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
mStartDragX = ev.getX();
mStartTime = ev.getEventTime();
break;
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (getCurrentItem() == 0 || getCurrentItem() == getAdapter().getCount() - 1) {
final int action = ev.getAction();
float x = ev.getX();
switch (action & MotionEventCompat.ACTION_MASK) {
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
long mEndTime = ev.getEventTime();
if (Math.abs(x - mStartDragX) > MIN_DISTANCE && (mEndTime - mStartTime) < MAX_TIME) {
if (getCurrentItem() == 0 && x > mStartDragX) {
onSwipeOutAtStart();
return true;
}
if (getCurrentItem() == getAdapter().getCount() - 1 && x < mStartDragX) {
onSwipeOutAtEnd();
return true;
}
}
break;
}
} else {
mStartDragX = 0;
}
return super.onTouchEvent(ev);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
try {
return ((PagedReader.PageAdapter) getAdapter()).getCurrentPage().canScroll(dx);
} catch (Exception ignored) {
}
return super.canScroll(v, checkV, dx, x, y);
}
}