1.点击事件启动服务

public void startFloatingButtonService(View view) {Log.e("TAG", "startFloatingButtonService: "+FloatingButtonService.isStarted);if (FloatingButtonService.isStarted) {return;}if (!Settings.canDrawOverlays(this)) {Toast.makeText(this, "当前无权限,请授权", Toast.LENGTH_SHORT);startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), 0);} else {startService(new Intent(MainActivity.this, FloatingButtonService.class));}}

2.服务代码


import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import  com.example.xuanfuactivity.R;import android.app.Service;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;import androidx.annotation.Nullable;/*** Created by dongzhong on 2018/5/30.*/public class FloatingButtonService extends Service {public static boolean isStarted = false;private WindowManager windowManager;private WindowManager.LayoutParams layoutParams;private  View mDesktopLayout;private Button button,b2;private ImageView imageView;private int imgs [] ={R.mipmap.img1,R.mipmap.img2,R.mipmap.img3,R.mipmap.img4,R.mipmap.img5,R.mipmap.img6,R.mipmap.gif};private int index=0;@Overridepublic void onCreate() {super.onCreate();isStarted = true;windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);layoutParams = new WindowManager.LayoutParams();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;} else {layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;}layoutParams.format = PixelFormat.RGBA_8888;layoutParams.gravity = Gravity.LEFT | Gravity.TOP;layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;layoutParams.width = 500;layoutParams.height = 800;layoutParams.x = 0;layoutParams.y = 0;}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {showFloatingWindow();return super.onStartCommand(intent, flags, startId);}private void showFloatingWindow() {if (Settings.canDrawOverlays(this)) {LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);mDesktopLayout = inflater.inflate(R.layout.xuanfu_view_diy, null);imageView=mDesktopLayout.findViewById(R.id.i1);imageView.setImageResource(imgs[0]);button=mDesktopLayout.findViewById(R.id.b1);button.setOnClickListener(new onClicl());b2=mDesktopLayout.findViewById(R.id.b2);b2.setOnClickListener(new onClicl());mDesktopLayout.setOnTouchListener(new FloatingOnTouchListener());windowManager.addView(mDesktopLayout, layoutParams);}}public class onClicl implements View.OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.b1:if(index<6){index=index+1;}else{index=0;}imageView.setImageResource(imgs[index]);break;case R.id.b2:Log.e("", "onClick: 关闭" );windowManager.removeView(mDesktopLayout);isStarted=false;break;}}}private class FloatingOnTouchListener implements View.OnTouchListener, View.OnClickListener, View.OnLongClickListener {private int x;private int y;@Overridepublic boolean onTouch(View view, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:x = (int) event.getRawX();y = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:int nowX = (int) event.getRawX();int nowY = (int) event.getRawY();int movedX = nowX - x;int movedY = nowY - y;x = nowX;y = nowY;layoutParams.x = layoutParams.x + movedX;layoutParams.y = layoutParams.y + movedY;windowManager.updateViewLayout(view, layoutParams);break;default:break;}return false;}@Overridepublic void onClick(View v) {Log.e("TAG", "onClick: " );}@Overridepublic boolean onLongClick(View v) {return false;}}
}

3.服务配置代码

<serviceandroid:name=".service.FloatingButtonService"android:enabled="true"android:exported="true" />

4.悬浮框界面(xuanfu_view_diy)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:background="#000099"android:layout_gravity="center"><ImageViewandroid:layout_width="200dp"android:layout_height="200dp"android:id="@+id/i1"></ImageView><Buttonandroid:id="@+id/b1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="切换下一页"android:textColor="#ffffff"></Button><Buttonandroid:id="@+id/b2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="关闭悬浮框"android:textColor="#ffffff"></Button>
</LinearLayout>

XuanfuActivity.rar-互联网文档类资源-CSDN下载

全局悬浮框(只能在app开启式显示)相关推荐

  1. Android自定义浮框,Android实现全局悬浮框

    本文实例为大家分享了Android实现全局悬浮框的具体代码,供大家参考,具体内容如下 效果图: 代码实现: Androidmanifest.xml添加弹框权限 自定义悬浮窗类FloatWindow.j ...

  2. android固定悬浮框,Android实现全局悬浮框

    本文实例为大家分享了Android实现全局悬浮框的具体代码,供大家参考,具体内容如下 效果图: 代码实现: Androidmanifest.xml添加弹框权限 自定义悬浮窗类FloatWindow.j ...

  3. Android 悬浮框按钮

    示例: 悬浮框的xml代码:(layout_float.xml) <?xml version="1.0" encoding="utf-8"?> &l ...

  4. Android悬浮框实践

    1.常见悬浮框显示样式示例及应用场景 现在很多的应用都在使用悬浮框,例如微信视频,点击Home键以后,微信视频窗口一直停留在桌面上,小米手机屏幕上的快捷键(Home,锁屏...)等,那么我们今天将实现 ...

  5. Android 应用开机自启和无需权限开启悬浮框

    开机自启主要自定义广播接收类,且需要在清单文件中注册,不要在代码中动态注册. <uses-permission android:name="android.permission.REC ...

  6. WindowManager解析(二)Android悬浮框无法弹出输入法的原因和无需权限显示悬浮窗

    Android悬浮框无法弹出输入法 最近要研究悬浮窗方面的东西,遇到一个问题,我的悬浮窗里面有一个输入框,但是不弹出输入法,后来找到一个方法: 在WindowManager的实例获取方式不对,之前是这 ...

  7. android之桌面悬浮框

    类似360 的那个小球,一直悬浮在手机桌面上,点击时跳转其他界面 APK:http://fir.im/uraq 先说一下这个APK,为什么要说呢,因为安装完看不见图标,然后你会发现什么都没有,先去应用 ...

  8. WindowManager 简单悬浮框的实现

    参考: permission denied for window type 2003 WindowManager(窗口管理服务) 10.7 WindowManager(窗口管理服务) 权限: < ...

  9. Android UI开发第十四篇——可以移动的悬浮框

    工作中遇到一些项目需要把窗体显示在最上层,像来电弹窗显示电话号码等信息或拦截短信信息显示给用户,我们想这些数据放在最上层,activity就满足不了我们的需求了,有些开发者使用了循环显示Toast的方 ...

最新文章

  1. 解决 Error:No suitable device found: no device found for connection quot;System eth0quot;
  2. Flask项目支持https
  3. OpenCV OMZ MTCNN人脸检测的实例(附完整代码)
  4. c语言求标准体重答案,C语言标准体重测试程序,请大家帮我看下,我的代码哪错了?...
  5. react中setState有三种用法
  6. android wi-fi_如何在Android手机上查找3G或Wi-Fi速度
  7. YurunOAuthLogin v2.0.2,第三方 OAuth2 授权一把梭
  8. 4-12DataSet Transformations
  9. 德国Java工程师_1886年,德国工程师。
  10. 七牛云 rs.php 没有,设置了callbackUrl,七牛只是在客户端上打印了json格式的key和hash,居然没有按照设置跳转回来..怎么弄?...
  11. 一些常用的正交试验表生成: 单一水平、混合水平、交互作用
  12. JAVA使用JEP进行动态公式计算
  13. 软考高级《信息系统项目管理师》(简称高项)考证经验(满满的干货)
  14. ST-link无法下载—— “ access port fault. check the access port selection and ensure it fits the debugging
  15. 管理计算机找不到应用程序,Win7计算机管理提示找不到文件或没有关联的程序问题解决方法...
  16. 微信聊天软件测试用例设计,微信页面测试用例_20140819
  17. 黔程似锦——2021国庆游攻略
  18. ThingsBoard 规则引擎-邮件通知
  19. GPS 双频/单频接收机介绍
  20. trove mitaka集成

热门文章

  1. ESP8266固件SDK开发之微信配网(AIRKISS)原理(一)
  2. 开箱即用!让世界最强AI成为你的生产力
  3. 最出色的吉他贝斯效果器:IK Multimedia AmpliTube 5 Mac
  4. 目前市面上的单片机操作系统很多,为何FreeRTOS会这么抢眼
  5. 利用电磁特性分析对永磁同步电机进行故障诊断
  6. 试验1:观察Windows的内核模块、数据结构和函数
  7. 荣耀50系列发布半年,60又来,考虑入手吗?
  8. 跟上脚步,进入后台执行新时代
  9. 天津.NET俱乐部 微软Windows 7 社区发布邀请
  10. 二级人力资源管理师论文写作心得