• 思想:来源于Toast,Toast是一个可以附在任何应用之上的View
     public static Toast makeText(Context context, CharSequence text, @Duration int duration) {Toast result = new Toast(context);LayoutInflater inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);tv.setText(text);result.mNextView = v;result.mDuration = duration;return result;}
  public void show() {if (mNextView == null) {throw new RuntimeException("setView must have been called");}INotificationManager service = getService();String pkg = mContext.getOpPackageName();TN tn = mTN;//TN的构造方法中创建了ToastView,并将其加入到WindowManager中tn.mNextView = mNextView;try {service.enqueueToast(pkg, tn, mDuration);} catch (RemoteException e) {// Empty}}
  • 自定义可自由移动的浮窗
/*** 自定义归属地浮窗 需要权限android.permission.SYSTEM_ALERT_WINDOW*/private void showToast(String text) {mWM = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);// 获取屏幕宽高winWidth = mWM.getDefaultDisplay().getWidth();winHeight = mWM.getDefaultDisplay().getHeight();params = new WindowManager.LayoutParams();params.height = WindowManager.LayoutParams.WRAP_CONTENT;params.width = WindowManager.LayoutParams.WRAP_CONTENT;params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;params.format = PixelFormat.TRANSLUCENT;params.type = WindowManager.LayoutParams.TYPE_PHONE;// 电话窗口。它用于电话交互(特别是呼入)。它置于所有应用程序之上,状态栏之下。params.gravity = Gravity.LEFT + Gravity.TOP;// 将重心位置设置为左上方, 也就是(0,0)从左上方开始,而不是默认的重心位置params.setTitle("Toast");//int lastX = mPref.getInt("lastX", 0);//int lastY = mPref.getInt("lastY", 0);// 设置浮窗的位置, 基于左上方的偏移量params.x = lastX;params.y = lastY;// view = new TextView(this);view = View.inflate(this, R.layout.toast_address, null);int[] bgs = new int[] { R.drawable.call_locate_white,R.drawable.call_locate_orange, R.drawable.call_locate_blue,R.drawable.call_locate_gray, R.drawable.call_locate_green };int style = mPref.getInt("address_style", 0);view.setBackgroundResource(bgs[style]);// 根据存储的样式更新背景TextView tvText = (TextView) view.findViewById(R.id.tv_number);tvText.setText(text);mWM.addView(view, params);// 将view添加在屏幕上(Window)view.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:// 初始化起点坐标startX = (int) event.getRawX();startY = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:int endX = (int) event.getRawX();int endY = (int) event.getRawY();// 计算移动偏移量int dx = endX - startX;int dy = endY - startY;// 更新浮窗位置params.x += dx;params.y += dy;// 防止坐标偏离屏幕if (params.x < 0) {params.x = 0;}if (params.y < 0) {params.y = 0;}// 防止坐标偏离屏幕if (params.x > winWidth - view.getWidth()) {params.x = winWidth - view.getWidth();}if (params.y > winHeight - view.getHeight()) {params.y = winHeight - view.getHeight();}// System.out.println("x:" + params.x + ";y:" + params.y);mWM.updateViewLayout(view, params);// 重新初始化起点坐标startX = (int) event.getRawX();startY = (int) event.getRawY();break;case MotionEvent.ACTION_UP:// 记录坐标点Editor edit = mPref.edit();edit.putInt("lastX", params.x);edit.putInt("lastY", params.y);edit.commit();break;default:break;}return true;}});}}

自定义可自由移动的浮窗相关推荐

  1. Service: 三、小窗口(浮窗) 播放视频

    文章目录 前言 一.先来张效果图 二.使用步骤 1.配置清单文件 2.编写 Service 3. Activity 4.请求权限 5.浮窗的页面贴一下 三.画中画 总结 前言 本篇以简单的浮窗视频为例 ...

  2. vue滑动窗口_vue-floating 浮窗组件、封装基于better-scroll的滑动组件、vue自定义手势指令...

    本篇主要是为了介绍和如何使用之前撸的三个vue在移动端常用的组件,现已开源,欢迎大家使用: 一个基于vue的浮窗组件,可在屏幕内自由拖拽,拖拽后的位置即可不变,也可在移动过程中手指释放浮窗横向贴边. ...

  3. vue中使用echarts实现地图颜色渐变及自定义浮窗内容

    在这篇文章里vue中使用echarts自定义浮窗内容及样式_芝士焗红薯的博客-CSDN博客,总结了echarts的一些简单用法.这篇文章,一个是在原来的自定义浮窗内容上实现了地图的颜色渐变,一个是简化 ...

  4. EC esayClick 自定义浮窗

    <?xml version="1.0" encoding="UTF-8" ?> <TextView android:background=&q ...

  5. VUE/使用echarts格式化浮窗自定义按钮及事件

    注意看这一段代码 mounted() {let that=this;window.detal = function () {that.$router.push({path: "/trahea ...

  6. python 悬浮窗_python浮窗

    import wx; app = wx.App(); win = wx.Frame(None,title="老穆视频",pos=(900,20),size=(300,60),sty ...

  7. 浮窗---创建Activity浮窗(可拖动)

    目录 一.目标 二.代码实现 1.获取activity的根布局 (1)activity的根布局是FrameLayout,其id为content (2)在main_activity.xml中简单写下布局 ...

  8. Android音乐浮窗播放器

    这是来到公司的第一个小项目.做一个音乐播放器,内容如下 Float Music(浮窗音乐播放器) 考点: 服务, 音乐播放, 浮窗界面, 列表界面, 自定义view, 手势操作 功能描述: 1.音乐列 ...

  9. 微信大更新,黄脸表情会动了,还能炸群!还有状态、浮窗...张小龙剧透的功能全来了...

    1月21日,微信在十岁生日这天,正式向iOS用户推送了8.0版本.张小龙前天在微信公开课上剧透的几个小功能,也一一出现在新版微信中. 会动的表情.微信个人状态.浮窗......在1月19日的微信公开课 ...

最新文章

  1. php path当局者迷,当局者迷_成语故事_有品有墨_品故事 写人生
  2. 201621123028《Java程序设计》第一周学习总结
  3. 写代码如坐禅:你是哪一类程序员?
  4. tl r402路由器设置_家里新安装宽带如何连接路由器 家里新安装宽带连接路由器方法【详解】...
  5. 【C++】vs无法更新DoDataExchange方法问题解决
  6. Java并发—锁的四种状态
  7. RFI to RCE challenge
  8. 音速索尼克 怪人_如何使用AI玩刺猬索尼克。 真干净!
  9. obj.href 与 obj.getAttribute(href)的区别
  10. 没有流氓软件,只有流氓行为
  11. 一个斐波那契数列题 HDU 2041
  12. 建立时间和保持时间关系详解
  13. Xshell6和Xftp6 破解免安装版(亲测可用)
  14. 帆软报表填报成功后实时刷新当前页面
  15. 网络基础之TCP/IP五层模型
  16. ISO27001体系的价值(详解)
  17. 路由跟踪的原理tracert
  18. 一年Java的阿里电话面试全纪录
  19. 【教程】Spire.PDF教程:C# 添加、获取和删除 PDF 自定义文档属性
  20. mybatis sql语句格式化 trim prefix suffix

热门文章

  1. 你会用PPT中的图片占位符吗?超级好用,不错的技能
  2. AlignedReID
  3. Mission-Pumpkin v1.0: PumpkinGarden(南瓜花园)靶机的渗透测试
  4. mysql表的基础操作: Create,,Retrieve,Update,Delete(大量示例)
  5. c35是什么意思_混凝土C35P6是什么意思
  6. xf0x9f java mysql_MySql导入数据报错Incorrect string value: ‘xF0x9Fx90x82’
  7. 【BZOJ4027】【HEOI2015】兔子与樱花 贪心
  8. Visual Paradigm简单教程(1):绘制状态机图
  9. 接龙管家-Python自动打卡
  10. PLC实验:LED 数码显示控制