package com.github.andlyticsproject.view; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.widget.Gallery; @SuppressWarnings("deprecation") public class ChartGallery extends Gallery { // private static String LOG_TAG=ChartGallery.class.toString(); private static final float SWIPE_MIN_DISTANCE = 100; private boolean interceptTouchEvents; private boolean useMultiImageFling; private boolean ignoreLayoutCalls; private boolean allowChangePageSliding = true; public ChartGallery(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ChartGallery(Context context, AttributeSet attrs) { super(context, attrs); } public ChartGallery(Context context) { super(context); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (!isIgnoreLayoutCalls()) super.onLayout(changed, l, t, r, b); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (interceptTouchEvents) { return true; } return false; } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (useMultiImageFling) { return super.onFling(e1, e2, velocityX, velocityY); } else { boolean result = false; if (Math.abs(velocityX) > 900) { if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && velocityX <= 0) { // hack - send event to simulate right key press KeyEvent rightKey = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT); onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, rightKey); rightKey = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_RIGHT); onKeyUp(KeyEvent.KEYCODE_DPAD_RIGHT, rightKey); result = true; } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE) { // hack - send event to simulate left key press KeyEvent leftKey = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT); onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, leftKey); leftKey = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_LEFT); onKeyUp(KeyEvent.KEYCODE_DPAD_LEFT, leftKey); result = true; } } return result; } } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (!allowChangePageSliding) { if(getSelectedView() != null && getSelectedView().getTag() != null) { int[] tag = (int[]) getSelectedView().getTag(); if (distanceX < 0 && tag[1] <= 1) return true; if (distanceX > 0 && tag[1] >= (tag[2] - 1)) return true; } } return super.onScroll(e1, e2, distanceX, distanceY); } public void setInterceptTouchEvents(boolean interceptTouchEvents) { this.interceptTouchEvents = interceptTouchEvents; } public boolean isInterceptTouchEvents() { return interceptTouchEvents; } public void setUseMultiImageFling(boolean useMultiImageFling) { this.useMultiImageFling = useMultiImageFling; } public boolean isUseMultiImageFling() { return useMultiImageFling; } public void setIgnoreLayoutCalls(boolean ignoreLayoutCalls) { this.ignoreLayoutCalls = ignoreLayoutCalls; } public boolean isIgnoreLayoutCalls() { return ignoreLayoutCalls; } public void setAllowChangePageSliding(boolean allowChangePageSliding) { this.allowChangePageSliding = allowChangePageSliding; } }