怎么在Android中实现悬浮窗按钮

  介绍

本篇文章给大家分享的是有关怎么在Android中实现悬浮窗按钮,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

首先是页面布局:

& lt; ? xml  version=?.0“,编码=皍tf-8" ?比;   & lt; layout  xmlns: android=癶ttp://schemas.android.com/apk/res/android"比;   ,& lt; data>   & lt;才能变量   ,,name=皏iewModel"   ,,类型=癱om.example.zjt.floatrecorder.FloatNormalViewModel"/比;   ,& lt;/data>      & lt; LinearLayout   android:才能layout_width=?0 dp"   android:才能layout_height=?0 dp"   android才能:重力=癱enter"比;      & lt;才能使用   ,,android: id=癅 + id/root"   ,,android: layout_width=皐rap_content"   ,,android: layout_height=皐rap_content"   ,,android:取向=皏ertical"比;   ,,& lt; !——,图标,点击后弹出后面的按钮,——比;   & lt; ImageView。才能   ,,,android: id=癅 + id/float_id"   ,,,android: layout_width=?0 dp"   ,,,android: layout_height=?0 dp"   ,,,android:背景=癅drawable/ic_launcher_background"   ,,,android: onClick=癅 {viewModel:: onControlClick},/比;   & lt;才能/RelativeLayout>   ,& lt;/LinearLayout>   & lt;/layout>

下面一步步的介绍这个悬浮窗的创建。

<强> 1悬浮窗的显示

//,创建WindowManager对象   private  WindowManager  windowManager;   windowManager =, (WindowManager), context.getSystemService (Context.WINDOW_SERVICE);//,创建悬浮窗的LayoutParams   ,private  void  initLayoutParams (), {   try {才能   ,,DisplayMetrics  metrics =, new  DisplayMetrics ();   ,,windowManager.getDefaultDisplay () .getMetrics(指标);   ,,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 显示(),{   if 才能;(! isShowing), {   ,,isShowing =,真的;   ,,windowManager.addView (,, lp);   ,,}   以前,}

想要移除悬浮窗也很简单,如下代码:

public  void 把(),{   if 才能;(isShowing), {   ,,isShowing =,假;   ,,windowManager.removeView(这个);   ,,}   以前,}

<强> 2触摸事件

触摸事件可以使得悬浮窗跟随手指进行移动

//,界面   FloatLayoutBinding  layoutBinding =, DataBindingUtil.inflate (LayoutInflater.from(上下文),R.layout.float_layout,这个假);   FloatNormalViewModel  FloatNormalViewModel =, new  FloatNormalViewModel(上下文、layoutBinding onClickCallback);   layoutBinding.setViewModel (floatNormalViewModel);   addView (layoutBinding.getRoot ());   时间=view  layoutBinding.root;   时间=isShowControlView  layoutBinding.floatId;//这就是控制按钮//,控制的变量   private  float  downX,,柔和;   private  float  moveX, moveY;//,触摸事件   isShowControlView.setOnTouchListener (new  OnTouchListener (), {   @Override才能   public 才能;boolean  ondraw (View 看来,,MotionEvent  motionEvent), {   ,,switch  (motionEvent.getActionMasked ()), {   ,,,case  MotionEvent.ACTION_DOWN:   ,,,,downX =, motionEvent.getRawX ();   ,,,,downY =, motionEvent.getRawY ();   ,,,,休息;   ,,,case  MotionEvent.ACTION_MOVE:   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Android中实现悬浮窗按钮