android 悬浮球 (所有界面可用) 开发

news/2024/11/24 18:57:52/

创建 service 后台启动

public class FBService extends Service {private static final String TAG = "FBService";public static final int TYPE_ADD = 0;public static final int TYPE_DEL = 1;private FloatBallManager mFBManager;@Overridepublic void onCreate() {super.onCreate();Log.d(TAG,"onCreate");mFBManager = FloatBallManager.getInstance(this);}private void showFloatBall() {Log.d(TAG,"showFloatBall");mFBManager.addBallView(); //通过mFBManager 在windowmanager添加view }@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d(TAG,"onStartCommand");showFloatBall(intent);showFloatBall();return super.onStartCommand(intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onDestroy() {super.onDestroy();Log.d(TAG,"onDestroy");}
}

通过FloatBallManager 在windowmanager 加载 悬浮球布局

public class FloatBallManager {private static final String TAG = "FloatBallManager";private FloatBallManager(Context ctx){mCtx = ctx;mWindowManager = (WindowManager) mCtx.getSystemService(Context.WINDOW_SERVICE);//获取WindowManager }public static  FloatBallManager getInstance(Context ctx){if(instance == null){synchronized(FloatBallManager.class){if(instance == null){instance = new FloatBallManager(ctx);}}}return instance;}public void addBallView() {if (mFloatBallView == null) {//获取 整个手机的宽度和高度DisplayMetrics dm = new DisplayMetrics();mWindowManager.getDefaultDisplay().getMetrics(dm);mScreenWidth = dm.widthPixels;mScreenHeight = dm.heightPixels;//填充悬浮球 布局mFBWindow = LayoutInflater.from(mCtx).inflate(R.layout.float_ball, null);mFloatBallView = mFBWindow.findViewById(R.id.float_ball);mFBParams = new LayoutParams(); //设置悬浮球布局的参数mFBParams.x = mScreenWidth-mFloatBallView.getWidth(); mFBParams.y = mScreenHeight / 2;mFBParams.width = WindowManager.LayoutParams.WRAP_CONTENT;mFBParams.height = WindowManager.LayoutParams.WRAP_CONTENT;mFBParams.gravity = Gravity.LEFT | Gravity.TOP;mFBParams.type = LayoutParams.TYPE_SYSTEM_ALERT | LayoutParams.TYPE_SYSTEM_OVERLAY;//顶层的View ,就要用这两个type mFBParams.format = PixelFormat.TRANSLUCENT;//半透明mFBParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE;//设置没有焦点不能touch,这样其他的界面才可以滑动和操作mWindowManager.addView(mFBWindow, mFBParams);//将View 按照mFBParams参数设置,添加到mWindowManager ,mFBParams是告诉mFBWindow 的父view}}//这个方法用来拖动时使用,更新位置public void updateBallView(int deltaX,int deltaY) {mFBParams.x += deltaX;mFBParams.y += deltaY;if (mWindowManager != null) {
//            Log.d(TAG,"updateBallView mParams.x = "+mFBParams.x+" mParams.y = "+mFBParams.y);mWindowManager.updateViewLayout(mFBWindow, mFBParams);}}
}

悬浮球布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/fl_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@android:color/transparent"android:orientation="vertical"><!--悬浮球背景--><ImageViewandroid:id="@+id/img_bg"  android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleX="0.7"android:scaleY="0.7"android:background="@drawable/icon_bg"android:layout_gravity="center"/><!--悬浮球动画小球--><ImageViewandroid:id="@+id/img_ball"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:alpha="0.5"android:scaleX="0.7"android:scaleY="0.7"android:background="@drawable/icon_ball"/><!--悬浮球动画大球--><ImageViewandroid:id="@+id/img_big_ball"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:scaleX="0.7"android:scaleY="0.7"android:background="@drawable/icon_big_ball"android:visibility="invisible"/><!--悬浮球开关 默认是off--><TextViewandroid:id="@+id/tv_switch"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="@string/switch_off"/>
</FrameLayout>

以上一个悬浮球 就可以显示了,但是不能操作

完整代码



http://www.ppmy.cn/news/877746.html

相关文章

自定义View:悬浮球与加速球

先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来&#xff0c;做成的效果有&#xff1a; 点击按钮后退出Activity&#xff0c;呈现一个圆形的悬浮球&#xff0c;可以随意拖动并会自动依靠到屏幕一侧&#xff0c;且拖动时会变成一…

移动端悬浮球示例

实现思路效果图代码 注意:此例子只适用于移动端; 实现思路 1.拖动元素 2.当拖放位置在左屏时,停靠屏幕在左边,右屏时,停靠在右边 3.当元素顶部(底部)在屏幕外时,停靠在屏幕顶部(底部); 效果图 代码 <!DOCTYPE html> <html lang"en"> <head>…

【app】1.1 悬浮球_绘制

前言 测试时需要抓取QXDM log&#xff0c;但是需要连接到电脑上&#xff0c;通过adb口下diag命令&#xff0c;打算编写apk&#xff0c;运行时显示一个悬浮球&#xff0c;可以直接通过apk的service去下diag命令。 设置悬浮球是因为录制音频软件时&#xff0c;如果退出当前录音…

android悬浮球代码,Android 仿360悬浮球与加速球

先来看一张动态图 昨天跟着视频学了如何自定义View并做成仿360悬浮球与加速球的样式 可以看出来&#xff0c;做成的效果有&#xff1a; 点击按钮后退出Activity&#xff0c;呈现一个圆形的悬浮球&#xff0c;可以随意拖动并会自动依靠到屏幕一侧&#xff0c;且拖动时会变成一张…

《深度学习推荐系统》笔记

目录 一、推荐系统是什么1.作用和意义2.推荐系统的架构2.1 逻辑架构2.2 技术架构 二、传统的推荐系统方法1. 协同过滤算法1.1 userCF&&ItemCF1.3 矩阵分解算法 2. 逻辑回归算法3. 因子分解机3.1 POLY2模型3.2 FM模型3.3 FFM模型3.4 小结 4. 组合模型4.1 GBDTLR组合模型…

Qt之悬浮球菜单

一、概述 最近想做一个炫酷的悬浮式菜单&#xff0c;考虑到菜单展开和美观&#xff0c;所以考虑学习下Qt的动画系统和状态机内容&#xff0c;打开QtCreator的示例教程浏览了下&#xff0c;大致发现教程中2D Painting程序和Animated Tiles程序有所帮助&#xff0c;如下图所示&a…

【android】悬浮球

效果图 原理 获取windowManager 设定WindowManager.LayoutParams使窗口悬浮 主要涉及的值如下&#xff0c;其中 params.type WindowManager.LayoutParams.TYPE_APPLICATION; 设置悬浮窗在应用内&#xff0c;在弹出dialog会悬浮在dialog下方&#xff0c;如果将这个值设置为…

多功能悬浮球下载_悬浮球app下载

应用介绍&#xff1a; 用过flyme系统没&#xff0c;里面的悬浮球应用非常好用。以至于换了其他rom之后不太习惯&#xff0c;因此自主研发了一个高仿的版本&#xff0c;方便广大用户也一起来体验体验。该应用可以轻松实现返回键、下拉通知栏、锁屏、打开多任务、home键等实用功能…