package com.gaiagps.iburn.view;
/**
* Created by davidbrodsky on 8/4/13.
*/
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewTreeObserver;
/**
* This class intercepts touch events to prevent
* swiping pages of the View Pager when on the map tab.
* This class assumes the map is on the first tab.
* See onPageScrolled(..) to alter this behavior
*
* @author davidbrodsky
*
*/
public class MapViewPager extends ViewPager {
private static final String TAG = "MapViewPager";
private float lastX, maxX = 0;
// threshold in pixels from screen border to allow scroll in mapview
private static final float cutoff_threshold = 20;
private boolean onMap = false;
public MapViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
maxX = getWidth() - cutoff_threshold;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if(onMap){
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = event.getX();
// Log.d("PAGER-DOWN", "X: " + String.valueOf(lastX) + " MaxX: " + String.valueOf(maxX));
break;
case MotionEvent.ACTION_MOVE:
// Log.d("PAGER-MOVE", "X: " + String.valueOf(lastX) + " MaxX: " + String.valueOf(maxX));
// Log.d("PAGER-MOVE", "interpreting touch as page right");
return lastX > maxX;
}
}
return super.onInterceptTouchEvent(event);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(positionOffset == 0){
onMap = (position == 0);
}
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
}