FloatWindow
FloatWindow copied to clipboard
拖动到最上面 或者最下面的时候,就被遮挡了
拖动到最上面 或者最下面的时候,就被遮挡了,请问上下有自动吸附边的功能吗?
请问你解决了这个问题么
我也碰到这个问题了,如何解决? 有没有设置屏幕上下最小距离? @yhaolpz
@lijiahua 在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;
@zlwblack 谢谢,用这种办法确实可以解决。
萌新,求指教,依赖好了之后,要实现上述方法,我该怎么去修改它呀?
萌新,求指教,依赖好了之后,要实现上述方法,我该怎么去修改它呀?
@bubble96 我上次fork出来改了,改动的地方在 IFloatWindowImpl.java 你可以看看https://github.com/lijiahua/FloatWindow
@lijiahua 是让我依赖你的包吗?
@lijiahua 我现在是项目里要用到这个控件,但是依赖好了,源码没法修改,只能想起他办法,所以想问下能依赖你的这个吗?
@lijiahua 我现在是项目里要用到这个控件,但是依赖好了,源码没法修改,只能想起他办法,所以想问下能依赖你的这个吗?
@bubble96 可以考虑依赖我这个包,如果测试功能符合你的需求。 否则的话只能参考我仓库里面的IFloatWindowImpl.java 进行修改了。
@lijiahua 能加下你好友吗,想请教下你?现在我加依赖好了,但是view没法与floatwindow连接上,早上我用yhao的同样的方法,能够用,现在没法拖动了...
@lijiahua 能加下你好友吗,想请教下你?现在我加依赖好了,但是view没法与floatwindow连接上,早上我用yhao的同样的方法,能够用,现在没法拖动了...
@bubble96 上代码 看看你的使用方式
public void initFloatWindow(){ final UserInfo userInfo = SystemContext.getInstance() .getLoginUserInfo(); SharedPreferences sharedPreferences = mContext.getSharedPreferences(SharedPreferencesName.LOGIN_PATH, Activity.MODE_PRIVATE); String userId = sharedPreferences.getString(SharedPreferencesName.LOGIN_NAME_KEY, ""); String username = userInfo.getName(); String user = userId +"\n" +username; textView = (TextView) findViewById(R.id.user_text); textView.setText(user); textView.setTextSize(20); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.DKGRAY); FloatWindow .with(getApplicationContext()) .setView(textView) .setX(Screen.width, 0.65f) .setY(Screen.height, 0.05f) .setMoveType(MoveType.slide,100,100) .setMoveStyle(500, new BounceInterpolator()) .setFilter(true,SpjkActivity.class) .setViewStateListener(mViewStateListener) .setPermissionListener(mPermissionListener) .setDesktopShow(true) .build(); }
我是直接在一个activity里添加的一个方法,然后调用它,后面还有权限允许和sample里一样,上午就跟这个一样,然后重新依赖了一次,后就没法调用了
我仓库里面有一个sample文件夹 里面有示例代码 你看看 应该是调用方式被我改了
看了下,没什么不同呀,最多就是多调用了下hide和destroy,你的sample能做到那个效果吗?
原来只要多调用一次show,已经可以了,谢谢大佬
@bubble96 ,请问你最后是怎么解决的?
@bubble96 ,请问你最后是怎么解决的?
在下面不是有个监听挪动标志的xy坐标的方法吗,把它修改下,使坐标超出多少,再重置下位置,就不会到屏幕外了
@bubble96 方便加一下我的QQ吗?88927161
@bubble96 是onPositionUpdate这个方法吧,我之前是修改了,但是悬浮球就不动了。 这个很让我疑惑。
去掉点击事件试试,最近在忙项目可能没空,这个也是一个多月前研究的了,而且我也是新手,不是很懂...
好的,谢谢。
@bubble96 方便把代码粘出来看看吗?我也是新手。
screenHeight为获取屏幕的高度也就是Y轴 if (y > screenHeight || y < 0) { FloatWindow.get().updateX(930); FloatWindow.get().updateY(780); }
930和780为我的原点
以上为这个问题,不改源代码的最好的一种实现方式。希望后来的人能够用得到。不要走重复的坑。