enter image description here我在这个问题上已经被困了多年,互联网似乎也不想提供帮助。
我有一个自定义视图,我可以使用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到达屏幕边缘时它应该始终停止
答案 0 :(得分:0)
moveParam.leftMargin = Math.max(0,Math.min(screen_width, x - Position_X- view.getWidth()));
这样可以防止视图完全脱离屏幕。你基本上做的是不让左边距低于0,或者超过屏幕的末尾。