介绍
本篇文章给大家分享的是有关怎么在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中实现悬浮窗按钮