package org.qii.weiciyuan.support.lib; import org.qii.weiciyuan.support.utils.Utility; import android.app.Activity; import android.support.v4.view.ViewPager; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; /** * User: qii * Date: 13-2-26 */ public class SwipeRightToCloseOnGestureListener extends GestureDetector.SimpleOnGestureListener { private ViewPager viewPager; protected MotionEvent mLastOnDownEvent = null; private float[] firstPosition = new float[2]; private View topView; public SwipeRightToCloseOnGestureListener(Activity activity, ViewPager viewPager) { this.viewPager = viewPager; this.topView = ((View) (activity.findViewById(android.R.id.content).getParent())); } @Override public boolean onDown(MotionEvent e) { mLastOnDownEvent = e; firstPosition[0] = e.getRawX(); firstPosition[1] = e.getRawY(); return true; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (e2.getRawX() < firstPosition[0]) { float y = this.topView.getTranslationX(); if (y != 0f) { this.topView.setTranslationX(0); return super.onScroll(e1, e2, distanceX, distanceY); } else { return false; } } final int MAX_MOTION_EVENT_DOWN__X_POSITION = Utility.dip2px(25); float s = e2.getRawX() - firstPosition[0]; if ((this.viewPager == null || this.viewPager.getCurrentItem() == 0) && firstPosition[0] <= MAX_MOTION_EVENT_DOWN__X_POSITION) { this.topView.setTranslationX(s); return super.onScroll(e1, e2, distanceX, distanceY); } else { return false; } } }