如何在Android中实现悬浮窗按钮
发表于:2024-12-03 作者:千家信息网编辑
千家信息网最后更新 2024年12月03日,这篇文章主要介绍了如何在Android中实现悬浮窗按钮的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Android中实现悬浮窗按钮文章都会有所收获,下面我们一起来看
千家信息网最后更新 2024年12月03日如何在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安全错误
数据库的锁怎样保障安全
缓解网络安全的办法
浏览器访问svn服务器
网络安全周活动总结银行
软件技术好学还是网络技术好学
太原兼职 软件开发
手抄报网络安全的重要性
触摸屏软件开发价格
软件开发 德能绩勤
下列属于能SQL数据库优势的有
本地区域网的服务器ip是指什么
贵州服务器托管
自建网站数据库
ug启动服务器未连接
科技互联网大会直播
南通it软件开发培训
淘宝图片数据库怎么用
网络安全法44条规定处罚
数据库中修改的函数是哪个
淄博染整软件开发报价
生态环境网络安全和信息化工作
错误代码105服务器连接失败
移动软件开发属于什么类别
web 服务器安全问题
泵站网络安全规范
山东大数据库 引领搜索
帆软报表链接数据库
网络安全图片素材高清
自学软件用什么软件开发
c数据库索引是什么
公共信息网络安全监察处忙不忙