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. 智源研究院发布世界首个“机器学习通用数学符号集”
  2. hadoop日志数据分析开发步骤及代码
  3. Chrome添加Axure RP插件
  4. 为多网络请个“交警”
  5. GIT 这么好用,为什么还是有人不知道怎么用它提交代码?
  6. 通过设计国际象棋游戏来了解策略模式
  7. Linux系统编程---13(线程控制函数,创建线程,循环创建多个线程,线程间共享全局变量)
  8. AI应用开发实战系列之一: 从零开始配置环境
  9. mysql 表锁的概念_MySQL 锁的一些简单概念
  10. 实现Android 动态载入APK(Fragment or Activity实现)
  11. matlab虚拟现实之V-Realm Builder2特别组节点使用
  12. Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构
  13. windows + hadoop + eclipse 过程记录
  14. Elasticsearch 之索引创建原则
  15. 用友nc 文件服务器,用友NC软件财务部分完整版操作手册(附图片).pdf
  16. 云计算与大数据之间的关系
  17. 守望先锋地图英文和英雄英文
  18. coreldraw橙子怎么画_CorelDRAW(CDR)设计绘制质感的橙子和冰块实例教程
  19. 克服J2SE 1.3-1.4 的不兼容性
  20. 如何用MATLAB求解一元高次方程

热门文章

  1. 自定义View加载进度条首页面
  2. LoadRunner的安装破解教程
  3. matplotlib模块数据可视化-设置次坐标轴
  4. 手机数据恢复的正确思路
  5. 数字迷宫小游戏源代码
  6. JavaScript基本数据类型与引用数据类型
  7. 如何给照片换背景?怎么用手机更换证件照背景颜色
  8. Threejs之粒子和透明那点事
  9. 请安息吧,史蒂夫 乔布斯
  10. Python+Matplotlib绘制三次贝塞尔曲线