import android.app.Activity;import android.util.Log;import android.view.GestureDetector;import android.view.GestureDetector.OnGestureListener;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;public abstract class MoveListerner implements OnTouchListener,OnGestureListener {public static final int MOVE_TO_LEFT = 0;public static final int MOVE_TO_RIGHT = MOVE_TO_LEFT + 1;public static final int MOVE_TO_UP = MOVE_TO_RIGHT + 1;public static final int MOVE_TO_DOWN = MOVE_TO_UP + 1;private static final int FLING_MIN_DISTANCE = 150;private static final int FLING_MIN_VELOCITY = 50;private boolean isScorllStart = false;private boolean isUpAndDown = false;GestureDetector mGestureDetector;float x1 = 0;float x2 = 0;float y1 = 0;float y2 = 0;public MoveListerner(Activity context) {super();mGestureDetector = new GestureDetector(context, this);}@Overridepublic boolean onTouch(View v, MotionEvent event) {if (mGestureDetector.onTouchEvent(event))return true;// 处理手势结束switch (event.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_UP:endGesture();break;}return false;}private void endGesture() {isScorllStart = false;isUpAndDown = false;Log.e("a", "AA:over");moveOver();}public abstract void moveDirection(View v, int direction);public abstract void moveUpAndDownDistance(MotionEvent event,int distance,int distanceY);public abstract void moveOver();@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn true;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn true;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {Log.e("a", "AA:B" + distanceX + ":" + distanceY);float mOldY = e1.getY();int y = (int) e2.getRawY();if (!isScorllStart) {if (Math.abs(distanceX) / Math.abs(distanceY) > 2) {// 左右滑动isUpAndDown = false;isScorllStart = true;} else if (Math.abs(distanceY) / Math.abs(distanceX) > 3) {// 上下滑动isUpAndDown = true;isScorllStart = true;} else {isScorllStart = false;}} else {// 算滑动速度的问题了if (isUpAndDown) {// 是上下滑动,关闭左右检测if (mOldY + 5 < y) {moveUpAndDownDistance(e2,-3,(int)distanceY);} else if (mOldY + 5 > y) {moveUpAndDownDistance(e2,3,(int)distanceY);}}}return true;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.e("a", "AA:A" + velocityX + ":" + velocityY);if (isUpAndDown)return false;if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {// Fling leftmoveDirection(null, MOVE_TO_LEFT);} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {// Fling rightmoveDirection(null, MOVE_TO_RIGHT);}// else if (e1.getY() - e2.getY() > FLING_MIN_DISTANCE// && Math.abs(velocityY) > FLING_MIN_VELOCITY) {// // Fling up// moveDirection(null, MOVE_TO_UP);// } else {// // Fling down// moveDirection(null, MOVE_TO_DOWN);// }return false;}}




更多相关文章

  1. Android(安卓)NestScrollView 监听滑动
  2. android滑动标题栏渐变实现
  3. Activity嵌套ViewPager+Fragment
  4. ImageLoader的原理
  5. pagertab 自定义控件碎片滑动
  6. Android(安卓)RecyclerView实现viewpager效果
  7. viewpager+fragment+radiogroup横向滑动切换界面
  8. ScrollView源码分析
  9. 仿照探探卡片滑动

随机推荐

  1. android权限设置
  2. Android 3.1 r1 中文API文档 (121) ——
  3. Android编译源码时出现的错误: “_FORTIFY
  4. Android 拍照 录音 拍视频 旋转 裁剪 压
  5. 【Android UI】状态栏和toolbar颜色一致
  6. webrtc android版本的编译及release版本
  7. Android模拟器分辨率介绍
  8. android目标sdk版本
  9. Android 点击back键两次退出程序
  10. Android Studio第三十一期 - 记录Recycle