Android - onTouch (ACTION_MOVE) - 阻止视图退出屏幕



在此处输入图像描述我已经在这个问题上停留了很长时间,互联网似乎也不想提供帮助。

我有一个自定义视图,我可以使用onTouchListener和它附带的事件在屏幕上拖动。 我需要这个拖动在它退出屏幕时停止。 我已经有了屏幕尺寸,我可以检测到何时需要发生某些事情,但我想不出一种好方法来"强制"视图保持在边界内。

如果我设置了一些布尔逻辑,它会冻结视图,使其无法拖回。 如果我将点保存到该标记,然后在检测到边界时将视图重新设置为这些点,它看起来很糟糕(跳跃(。

我正在寻找视图保持在边界上,即使用户不断移动手指只是在用户从边界向后拖动时才回到"播放"状态(如果你得到我?! 我的想法就像一堵想象中的墙...

相关代码如下,因此您可以了解我所处的位置

case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams moveParam = (RelativeLayout.LayoutParams) v.getLayoutParams();
float maxTop = (mHeight-mPeepHole)/2;
Log.d(TAG, "onTouch: maxTop = " + maxTop);
if (moveParam.topMargin > maxTop || moveParam.topMargin < -(mHeight-mPeepHole)/2)
{
Log.d(TAG, "onTouch: OUT OF BOUNDS HEIGHT");
// this fires when I need it to, all good.
// here is where I need some logic
}
if (moveParam.leftMargin > (mWidth-mPeepHole)/2 || moveParam.leftMargin < -(mWidth-mPeepHole)/2)
{
Log.d(TAG, "onTouch: OUT OF BOUNDS WIDTH");
// and here...
}
moveParam.leftMargin = x - Position_X;
moveParam.topMargin = y - Position_Y;
moveParam.rightMargin = -500; // ignore this at present
moveParam.bottomMargin = -500; // ignore this at present
v.setLayoutParams(moveParam);
break;

详细地说,x是中心点,不应该能够退出屏幕。 可以从任何点触摸和拖动视图,但当 x 碰到屏幕边缘时,它应该始终停止

moveParam.leftMargin = Math.max(0,Math.min(screen_width, x - Position_X- view.getWidth())); 

这将阻止视图完全移出屏幕。 你基本上要做的是不让左边距低于 0,或者超过屏幕的末尾。