如何在Android中实现悬浮窗按钮
发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,这篇文章主要介绍了如何在Android中实现悬浮窗按钮的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Android中实现悬浮窗按钮文章都会有所收获,下面我们一起来看
千家信息网最后更新 2024年10月23日如何在Android中实现悬浮窗按钮
这篇文章主要介绍了如何在Android中实现悬浮窗按钮的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Android中实现悬浮窗按钮文章都会有所收获,下面我们一起来看看吧。
首先是页面布局:
下面一步步的介绍这个悬浮窗的创建。
1 悬浮窗的显示
// 创建WindowManager对象private WindowManager windowManager;windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);// 创建悬浮窗的LayoutParams private void initLayoutParams() { try { DisplayMetrics metrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels; lp = new WindowManager.LayoutParams(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { lp.type = WindowManager.LayoutParams.TYPE_TOAST; } lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; lp.gravity = Gravity.START | Gravity.TOP; lp.x = screenWidth - view.getLayoutParams().width * 2; lp.y = 0; lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; lp.format = PixelFormat.TRANSPARENT; } catch (Exception e) { } }
上面分别创建了控制悬浮窗显示的WindowManager和控制悬浮窗布局的LayoutParams
然后使用如下代码就可展示悬浮窗了:
public void show() { if (!isShowing) { isShowing = true; windowManager.addView(this, lp); } }
想要移除悬浮窗也很简单,如下代码:
public void dismiss() { if (isShowing) { isShowing = false; windowManager.removeView(this); } }
2 触摸事件
触摸事件可以使得悬浮窗跟随手指进行移动
// 界面FloatLayoutBinding layoutBinding = DataBindingUtil.inflate(LayoutInflater.from(context),R.layout.float_layout,this,false);FloatNormalViewModel floatNormalViewModel = new FloatNormalViewModel(context,layoutBinding,onClickCallback);layoutBinding.setViewModel(floatNormalViewModel);addView(layoutBinding.getRoot());view = layoutBinding.root;isShowControlView = layoutBinding.floatId;//这就是控制按钮// 控制的变量private float downX, downY;private float moveX, moveY;// 触摸事件isShowControlView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: downX = motionEvent.getRawX(); downY = motionEvent.getRawY(); break; case MotionEvent.ACTION_MOVE: moveX = motionEvent.getRawX() - downX; moveY = motionEvent.getRawY() - downY; downX += moveX; downY += moveY; updateViewPosition(); break; } return false; }});private void updateViewPosition() { lp.x += (int) (moveX); lp.y += (int) (moveY); windowManager.updateViewLayout(this, lp);}
3 点击事件
点击事件是实现了一个回调函数,因为点击事件的逻辑不应该在此处完成,应当交给主布局进行控制,所以定义了一个点击接口。
这里事件的处理顺序是:点击了按钮后,按钮将点击事件通过回调函数来处理,而回调函数是由创建这个View的Activity或者Fragment、Service等提供的,就将事件处理交到了外部。
// 点击的接口public interface OnClickCallback { public void onClick(View view);}// 控制按钮点击事件public void onControlClick(View view){ if(onClickCallback != null) onClickCallback.onClick(view);}
多功能悬浮窗
多功能悬浮窗与上面类似,只不过在点击事件上较多而已。
而如何完成两个悬浮窗的切换呢,就可以利用之前所使用的OnClickCallback回调接口了,将一个显示、另一个隐藏即可,且两个悬浮窗若采用同一个LayoutParams就可以让两个显示在同一个位置。
private void init() { floatNormalView = new FloatNormalView(context, new OnClickCallback() { @Override public void onClick(View view) { floatControlView.setLayoutParams(floatNormalView.getLayoutParams()); floatControlView.show(); floatNormalView.dismiss(); } }); floatControlView = new FloatControlView(context, new OnClickCallback() { @Override public void onClick(View view) { floatNormalView.setLayoutParams(floatControlView.getLayoutParams()); floatNormalView.show(); floatControlView.dismiss(); } }, new FloatControlViewModel.OnVisibleChangeListener() { @Override public void onChange(boolean isVisible) { if (isControlVisible) { floatControlView.show(); floatNormalView.dismiss(); } else { floatControlView.dismiss(); floatNormalView.show(); } } }); floatNormalView.show(); }
关于"如何在Android中实现悬浮窗按钮"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"如何在Android中实现悬浮窗按钮"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
事件
按钮
控制
中实
两个
函数
布局
接口
知识
处理
代码
内容
多功能
篇文章
价值
位置
变量
只不过
对象
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全通讯英语论文
海康威视云境管理服务器
高青库存软件开发
服务器改静音散热
服务器架构和系统安装
会导致服务器管理吗
三菱PLC如何连接数据库
网络安全资质适用范围
中国网络安全学院官网
网络安全应急指挥口号
浙江计算机等级考试三级数据库
数据库约束参照
中国网络技术王子
fiery服务器软件
怎么自己创建vpn服务器
互联网公司跟网络科技公司
网络安全管理意识不强
网络安全法线上统一考试总结
沈阳数据库登录
无线网络技术 应用
服务器与客户端的通讯安全
烟台联联网络技术有限公司
空间数据库 考试
数据库中决定因素是什么意思
网络技术与应用 选修
微信服务器内网外网安全
网络安全认证 level
自动补全查询数据库匹配
数据库操作里常用操作命令
辽宁时代网络技术咨询报价