最近公司做小游戏开发,写倒计时加进度条 拖动问题 private boolean isIntercept = false; /** 按下时的位置控件相对屏幕左上角的位置X */ private int startDownX; /** 按下时的位置控件距离屏幕左上角的位置Y */ private int startDownY; /** 控件相对屏幕左上角移动的位置X */ private int lastMoveX; /** 控件相对屏幕左上角移动的位置Y */ private int lastMoveY;
vsv_show.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: startDownX = lastMoveX = (int) event.getRawX(); startDownY = lastMoveY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastMoveX; int dy = (int) event.getRawY() - lastMoveY; int left = v.getLeft() + dx; int top = v.getTop() + dy; int right = v.getRight() + dx; int bottom = v.getBottom() + dy; if (left < 0) { left = 0; right = left + v.getWidth(); } if (right > mScreenWidth) { right = mScreenWidth; left = right - v.getWidth(); } if (top < 0) { top = 0; bottom = top + v.getHeight(); } if (bottom > mScreenHeight) { bottom = mScreenHeight; top = bottom - v.getHeight(); } v.layout(left, top, right, bottom); lastMoveX = (int) event.getRawX(); lastMoveY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: int lastMoveDx = Math.abs((int) event.getRawX() - startDownX); int lastMoveDy = Math.abs((int) event.getRawY() - startDownY); if (0 != lastMoveDx || 0 != lastMoveDy) { isIntercept = true; } else { isIntercept = false; } RelativeLayout.LayoutParams lpFeedback = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lpFeedback.leftMargin = v.getLeft(); lpFeedback.topMargin = v.getTop(); lpFeedback.setMargins(v.getLeft(), v.getTop(), 0, 0); v.setLayoutParams(lpFeedback); break; } return isIntercept; } });