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命中屏幕边缘时,视图应始终停止
发布于 2017-07-18 19:21:46
moveParam.leftMargin = Math.max(0,Math.min(screen_width, x - Position_X- view.getWidth()));
这将完全阻止视图移出屏幕。你基本上要做的就是不让左边距低于0,或者超过屏幕的末端。
https://stackoverflow.com/questions/45175283
复制相似问题