0
enter image description here我一直在这个问题上困扰了很多年,互联网似乎也不想帮忙。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碰到屏幕边缘
这是很好的谢谢。然而,从用户触摸输入x/y开始跟踪,我的项目效果不佳。我的观点是全屏幕,因此可以从任何地方触摸,但它只有屏幕的中心点(宽度/ 2,高度/ 2),我需要包含它。 –
然后不是减去视图宽度,而是减去一半。而不是最大与0,最大与-view.getWidth()/ 2 –
您可以详细说明吗?尽管我感觉我很接近,但我无法让它工作。无论我放置手指的位置如何,检测都能正常工作,但只有在屏幕正中间放置时,视图才会“粘住”。 –