首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android - onTouch (ACTION_MOVE) -阻止视图退出屏幕

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

Stack Overflow用户
提问于 2017-07-19 03:15:26
回答 1查看 887关注 0票数 0

enter image description here在这个问题上我已经被困了很长时间,而互联网似乎也不想提供帮助。

我有一个自定义视图,可以使用onTouchListener和随附的事件在屏幕上拖动。我需要这个拖拽在它退出屏幕时停止。我已经得到了屏幕尺寸,我可以检测到什么时候我需要发生一些事情,但我想不出一个好方法来“迫使”视图停留在边界内。

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

我正在寻找保持在边界上的视图,即使用户不断移动他们的手指,当用户从边界向后拖动时才返回到“播放”(如果你明白我的意思?!)。我的想法就像一堵假想的墙。

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

代码语言:javascript
运行
复制
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命中屏幕边缘时,视图应始终停止

EN

回答 1

Stack Overflow用户

发布于 2017-07-19 03:21:46

代码语言:javascript
运行
复制
moveParam.leftMargin = Math.max(0,Math.min(screen_width, x - Position_X- view.getWidth())); 

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45175283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档