- 浏览: 2196485 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
不知道有没有童鞋用过QQ的Android版本中的一个高清版本,当你退出QQ的时候,会在你的屏幕上出现一个QQ图标的悬浮窗,就和PC上的迅雷的悬浮窗口一样,在所有应用的最上层,本来这个功能感觉还是挺好的,结果TX就给流氓了下,居然没有做隐藏掉这个悬浮窗的功能。
今天就来为大家简单介绍下这个悬浮窗的实现方法吧,不过记住至少还是给用户做一个隐藏掉这个悬浮窗的功能吧!其实实现原理还是挺简单的,就是利用WindowManager将你的图标View添加到窗口中,不知道大家知道WindowManager.LayoutParams中有一个type属性不,这里玄机挺大的,找了好久,终于给我试出来有一个TYPE_PHONE可以来实现这个功能的,该类型提供与用户交互,置于所有应用程序上方,但是在状态栏后面。至于其他的类型,大家还是去找API或者GG吧。
先看下效果图吧:
红框圈中得图标可以任意拖动哦,你可以根据自己的实际需要给图标添加功能。
核心代码如下:
今天就来为大家简单介绍下这个悬浮窗的实现方法吧,不过记住至少还是给用户做一个隐藏掉这个悬浮窗的功能吧!其实实现原理还是挺简单的,就是利用WindowManager将你的图标View添加到窗口中,不知道大家知道WindowManager.LayoutParams中有一个type属性不,这里玄机挺大的,找了好久,终于给我试出来有一个TYPE_PHONE可以来实现这个功能的,该类型提供与用户交互,置于所有应用程序上方,但是在状态栏后面。至于其他的类型,大家还是去找API或者GG吧。
先看下效果图吧:
红框圈中得图标可以任意拖动哦,你可以根据自己的实际需要给图标添加功能。
核心代码如下:
package com.iaiai.activity; import android.app.Service; import android.content.Intent; import android.graphics.PixelFormat; import android.os.IBinder; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.WindowManager; /** * * <p> * Title: TopFloatService.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2012-2-10 上午9:31:54 * </p> * * @author 丸子 * @version 0.0.1 */ public class TopFloatService extends Service { WindowManager wm = null; WindowManager.LayoutParams wmParams = null; View view; private float mTouchStartX; private float mTouchStartY; private float x; private float y; @Override public void onCreate() { super.onCreate(); view = LayoutInflater.from(this).inflate(R.layout.floating, null); createView(); } private void createView() { // 获取WindowManager wm = (WindowManager) getApplicationContext().getSystemService("window"); // 设置LayoutParams(全局变量)相关参数 wmParams = ((MyApplication) getApplication()).getMywmParams(); wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;// 该类型提供与用户交互,置于所有应用程序上方,但是在状态栏后面 wmParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;// 不接受任何按键事件 wmParams.gravity = Gravity.LEFT | Gravity.TOP; // 调整悬浮窗口至左上角 // 以屏幕左上角为原点,设置x、y初始值 wmParams.x = 0; wmParams.y = 0; // 设置悬浮窗口长宽数据 wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT; wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT; wmParams.format = PixelFormat.RGBA_8888; wm.addView(view, wmParams); view.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // 获取相对屏幕的坐标,即以屏幕左上角为原点 x = event.getRawX(); // 25是系统状态栏的高度,也可以通过方法得到准确的值,自己微调就是了 y = event.getRawY()-25 ; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 获取相对View的坐标,即以此View左上角为原点 mTouchStartX = event.getX(); mTouchStartY = event.getY()+view.getHeight()/2; break; case MotionEvent.ACTION_MOVE: updateViewPosition(); break; case MotionEvent.ACTION_UP: updateViewPosition(); mTouchStartX = mTouchStartY = 0; break; } return true; } }); } private void updateViewPosition() { // 更新浮动窗口位置参数 wmParams.x = (int) (x - mTouchStartX); wmParams.y = (int) (y - mTouchStartY); wm.updateViewLayout(view, wmParams); } @Override public IBinder onBind(Intent intent) { return null; } }
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 626本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1099颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 992从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1166Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1004Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 839前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 929监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 800在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 949最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1327##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1113当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 778setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1506问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 766底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1781点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1370import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2313TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1549一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 865Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 932最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
悬浮窗,大家应该也不陌生,凌驾于应用之上的一个小弹窗,实现上很简单,就是添加一个系统级别的窗口,Android中通过WindowManagerService( WMS)来管理所有的窗口,对于WMS来说,管你是Activity、Toast、Dialog,...
1. **悬浮窗基础**:在Android中,悬浮窗通常通过`android.view.WindowManager`服务来创建,它允许应用在屏幕的任意位置添加、移动或删除视图。悬浮窗需要`SYSTEM_ALERT_WINDOW`权限,可以在应用的`AndroidManifest....
在Android开发中,实现一个无需额外权限的悬浮窗功能是一个常见的需求,特别是在打造辅助工具或者个性化应用时。本文将详细讲解如何在Android系统4.4(API Level 19)及以上版本实现这样的功能,主要涉及的技术点是...
通过深入理解Android的窗口管理、视图系统以及多媒体播放,你可以进一步优化悬浮窗的性能和用户体验,例如添加拖放功能、调整视频比例、处理屏幕旋转等。这个名为`MyFloatView`的压缩包文件提供了一个直接运行的示例...
4. **添加和移除悬浮窗**:通过`WindowManager`的`addView()`方法添加悬浮窗,`removeView()`方法移除它。同时,可能还需要处理用户的触摸事件,以便在用户触摸到悬浮窗时做出响应。 5. **动态更新**:如果需要实时...
通过以上步骤,你可以成功地在Android应用中实现类似微信文章阅读时的悬浮窗功能。在实际开发中,可能还需要根据具体需求进行优化,例如添加动画效果、自定义拖动行为等。总之,理解并熟练运用这些知识点是开发高效...
3. 获取`WindowManager`服务并添加悬浮窗:通过`Context.getSystemService()`方法获取到`WindowManager`服务,然后调用`addView()`方法将自定义的视图添加到悬浮窗中。 ```java WindowManager windowManager = ...
4. 添加悬浮窗到窗口: 使用`WindowManager`的`addView()`方法将我们的视图添加到屏幕上。在这个过程中,我们需要传递布局、布局参数以及视图的父容器(通常是空的FrameLayout): ```java FrameLayout parent...
在AndroidManifest.xml文件中,添加悬浮窗所需的权限: ```xml <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> ``` 2. 创建悬浮视图: 悬浮窗的核心是通过`WindowManager`接口来管理...
这个标题“Android-Android任意界面悬浮窗实现悬浮窗如此简单”暗示了我们将探讨如何轻松地创建这样的功能。描述进一步强调了实现的简便性,让我们相信即使对Android开发不太熟悉的人也能理解并实现。 首先,我们要...
主要涉及的核心类是`WindowManager`和`LayoutParams`,以及如何通过`addView`方法将自定义视图添加到悬浮窗中。开发者还需要理解AndroidManifest.xml中的相关权限设置,如`SYSTEM_ALERT_WINDOW`。 3. **android桌面...
在`AndroidManifest.xml`中,需要添加悬浮窗所需的权限: ``` <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> ``` 这个权限使得应用可以在其他应用之上显示窗口。 3. **悬浮窗...
在Android开发中,后台服务(Service)和悬浮窗(Floating Window)是两个关键概念,而动态截屏和录屏功能的实现则涉及到更深层次的技术。本文将深入探讨如何利用IntentService进行后台截屏,并实现悬浮窗来动态显示...
5. 使用WindowManager对象,添加悬浮窗视图,使用addView方法来添加View。 6. 最后,使用updateViewLayout方法来更新悬浮窗的位置和大小。 四、WindowManager类型 WindowManager提供了多种类型的窗口,包括: * ...
1. 权限声明:首先,要在AndroidManifest.xml中添加悬浮窗权限: ```xml <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> ``` 由于Android 6.0(API Level 23)及以上版本,用户需要在...
总的来说,这份"Android应用源码之android 悬浮窗"资源为初学者提供了实践悬浮窗功能的实例,可以帮助他们深入理解Android系统的运行机制,提升移动应用开发技能。同时,对于毕业设计,可以作为研究Android特色功能...
6. **添加悬浮窗**: 在Service的`onCreate()`方法中,实例化`WindowManager`和`LayoutParams`,然后使用`windowManager.addView(customView, layoutParams)`将自定义View添加到屏幕。 7. **更新和移除悬浮窗**: ...