比较关键的实现思路~~
一、 布局文件构成?
1、使用2个FrameLayout作为悬浮球、菜单栏 (默认隐藏掉菜单栏);
2、菜单栏 内部 由多个 XXXXLayout布局 实现;
二 、悬浮球代码实现?
1、自定义一个类,假如叫做 Ball , 继承 FrameLayout ,并且实现 OnTouchListener 以便实现 拖动悬浮球的 需求;
2、初始化是必须的 , a: 初始化悬浮球的位置,获取屏幕参数,设定windowManager的layoutparams ; b: 创建出悬浮球,加载布局和控件 ; c: FrameLayout添加悬浮球布局,通过windowManager添加该view;
3、windowManager的参数类型选为:LAST_APPLICATION_WINDOW
4、窗口类型的讲解:https://blog.csdn.net/geloin/article/details/42779025
三、屏幕旋转怎么处理悬浮球?
重写onConfigurationChanged方法,判断横竖屏,进而改写悬浮球的坐标;
怎么改?改变mWindowManager的参数值,xy参数;调用updateViewLayout()方法刷新;
四、实现拖动?
重写onTouch方法
// 获取相对屏幕的坐标,即以屏幕左上角为原点
int x = (int) event.getRawX();
int y = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE: //移动
float mMoveStartX = event.getX();
float mMoveStartY = event.getY();
// 更新浮动窗口位置参数
mWmParams.x = (int) (x - mTouchStartX);
mWmParams.y = (int) (y - mTouchStartY);
//mWindowManager更新view
break;
}
END.