比较关键的实现思路~~

一、 布局文件构成?

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..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.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐