全局悬浮框(只能在app开启式显示)
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开启式显示)相关推荐
- Android自定义浮框,Android实现全局悬浮框
本文实例为大家分享了Android实现全局悬浮框的具体代码,供大家参考,具体内容如下 效果图: 代码实现: Androidmanifest.xml添加弹框权限 自定义悬浮窗类FloatWindow.j ...
- android固定悬浮框,Android实现全局悬浮框
本文实例为大家分享了Android实现全局悬浮框的具体代码,供大家参考,具体内容如下 效果图: 代码实现: Androidmanifest.xml添加弹框权限 自定义悬浮窗类FloatWindow.j ...
- Android 悬浮框按钮
示例: 悬浮框的xml代码:(layout_float.xml) <?xml version="1.0" encoding="utf-8"?> &l ...
- Android悬浮框实践
1.常见悬浮框显示样式示例及应用场景 现在很多的应用都在使用悬浮框,例如微信视频,点击Home键以后,微信视频窗口一直停留在桌面上,小米手机屏幕上的快捷键(Home,锁屏...)等,那么我们今天将实现 ...
- Android 应用开机自启和无需权限开启悬浮框
开机自启主要自定义广播接收类,且需要在清单文件中注册,不要在代码中动态注册. <uses-permission android:name="android.permission.REC ...
- WindowManager解析(二)Android悬浮框无法弹出输入法的原因和无需权限显示悬浮窗
Android悬浮框无法弹出输入法 最近要研究悬浮窗方面的东西,遇到一个问题,我的悬浮窗里面有一个输入框,但是不弹出输入法,后来找到一个方法: 在WindowManager的实例获取方式不对,之前是这 ...
- android之桌面悬浮框
类似360 的那个小球,一直悬浮在手机桌面上,点击时跳转其他界面 APK:http://fir.im/uraq 先说一下这个APK,为什么要说呢,因为安装完看不见图标,然后你会发现什么都没有,先去应用 ...
- WindowManager 简单悬浮框的实现
参考: permission denied for window type 2003 WindowManager(窗口管理服务) 10.7 WindowManager(窗口管理服务) 权限: < ...
- Android UI开发第十四篇——可以移动的悬浮框
工作中遇到一些项目需要把窗体显示在最上层,像来电弹窗显示电话号码等信息或拦截短信信息显示给用户,我们想这些数据放在最上层,activity就满足不了我们的需求了,有些开发者使用了循环显示Toast的方 ...
最新文章
- 解决 Error:No suitable device found: no device found for connection quot;System eth0quot;
- Flask项目支持https
- OpenCV OMZ MTCNN人脸检测的实例(附完整代码)
- c语言求标准体重答案,C语言标准体重测试程序,请大家帮我看下,我的代码哪错了?...
- react中setState有三种用法
- android wi-fi_如何在Android手机上查找3G或Wi-Fi速度
- YurunOAuthLogin v2.0.2,第三方 OAuth2 授权一把梭
- 4-12DataSet Transformations
- 德国Java工程师_1886年,德国工程师。
- 七牛云 rs.php 没有,设置了callbackUrl,七牛只是在客户端上打印了json格式的key和hash,居然没有按照设置跳转回来..怎么弄?...
- 一些常用的正交试验表生成: 单一水平、混合水平、交互作用
- JAVA使用JEP进行动态公式计算
- 软考高级《信息系统项目管理师》(简称高项)考证经验(满满的干货)
- ST-link无法下载—— “ access port fault. check the access port selection and ensure it fits the debugging
- 管理计算机找不到应用程序,Win7计算机管理提示找不到文件或没有关联的程序问题解决方法...
- 微信聊天软件测试用例设计,微信页面测试用例_20140819
- 黔程似锦——2021国庆游攻略
- ThingsBoard 规则引擎-邮件通知
- GPS 双频/单频接收机介绍
- trove mitaka集成