FloatWindow
FloatWindow copied to clipboard
拖拽悬浮控件按钮到状态栏最顶部,被状态栏挡住,就再也拖不下来了
使用版本 : 1.0.9 描述 : 如标题,某些带虚拟按键的手机,拖拽到虚拟按键位置,也一样拖不出来 有没有设置拖拽范围的方法 ?
可以考虑修改type或者flags应该可以做到无法拖拽到虚拟键和状态栏的位置
在IFloatWindowImpl中增加判断 /**
- 判断是否超出范围,根据自己需求设置比例大小,我自己设置的是0.025和0.975
- @param x event.getRawX()
- @param y event.getRawY()
- @return */ private boolean isOutOfRange(float x, float y) { boolean b = true; float screenWidth = Util.getScreenWidth(mB.mApplicationContext); float screenHeight = Util.getScreenHeight(mB.mApplicationContext); float widthRate, heightRate; widthRate = (screenWidth - x) / screenWidth; heightRate = (screenHeight - y) / screenHeight; if (widthRate > 0.025 && widthRate < 0.975 && heightRate > 0.025 && heightRate < 0.975) { b = false; } else { b = true; } return b; } 然后在case MotionEvent.ACTION_MOVE 中判断即可 case MotionEvent.ACTION_MOVE: if (!isOutOfRange(event.getRawX(), event.getRawY())) { changeX = event.getRawX() - lastX; changeY = event.getRawY() - lastY; newX = (int) (mFloatView.getX() + changeX); newY = (int) (mFloatView.getY() + changeY); mFloatView.updateXY(newX, newY); if (mB.mViewStateListener != null) { mB.mViewStateListener.onPositionUpdate(newX, newY); } lastX = event.getRawX(); lastY = event.getRawY(); } break;
萌新,问下大佬,现在我是依赖进项目里,源码没法改,我该怎么实现上下被覆盖的问题
突然发现只要在ViewStateListener,监控下y坐标,然后只要小于0或者大于屏高,使它重新获得一次y坐标就可以解决
我也是通过以上的方法进行改的,但是改完了之后就不会动了。
已经修复,限制在屏幕内拖动,版本:https://github.com/fenggit/FloatWindow