FloatWindow icon indicating copy to clipboard operation
FloatWindow copied to clipboard

拖拽悬浮控件按钮到状态栏最顶部,被状态栏挡住,就再也拖不下来了

Open jarylan opened this issue 6 years ago • 6 comments

使用版本 : 1.0.9 描述 : 如标题,某些带虚拟按键的手机,拖拽到虚拟按键位置,也一样拖不出来 有没有设置拖拽范围的方法 ?

jarylan avatar Oct 10 '18 01:10 jarylan

可以考虑修改type或者flags应该可以做到无法拖拽到虚拟键和状态栏的位置

BaconLi avatar Oct 10 '18 01:10 BaconLi

在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;

blackjackun avatar Oct 17 '18 02:10 blackjackun

萌新,问下大佬,现在我是依赖进项目里,源码没法改,我该怎么实现上下被覆盖的问题

bubble96 avatar Oct 24 '18 04:10 bubble96

突然发现只要在ViewStateListener,监控下y坐标,然后只要小于0或者大于屏高,使它重新获得一次y坐标就可以解决

bubble96 avatar Oct 24 '18 07:10 bubble96

我也是通过以上的方法进行改的,但是改完了之后就不会动了。

ShadeTeam avatar Nov 29 '18 12:11 ShadeTeam

已经修复,限制在屏幕内拖动,版本:https://github.com/fenggit/FloatWindow

fenggit avatar Jul 16 '19 05:07 fenggit