在使用"网易云音乐"的时候,发现有一个显示"桌面歌词"的功能,于是就想着自己实现下。查了下资料,是用WindowManage实现的。实现过程中也出现了些问题,看了官方文档,也算攻克了。这里贴上简单代码。

public class MainActivity extends Activity implements View.OnTouchListener{
MyView myView;
WindowManager wm;
WindowManager.LayoutParams layoutParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
//设置TextView的属性
layoutParams = new WindowManager.LayoutParams();
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
//这里是关键。使控件始终在最上方
layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
//这个Gravity也不能少。不然的话,以下"移动歌词"的时候就会出问题了~ 能够试试[官网文档有说明]
layoutParams.gravity = Gravity.LEFT|Gravity.TOP; //创建自己定义的TextView
myView = new MyView(this);
myView.setText("Test Touch");
myView.setTextColor(Color.BLACK);
myView.setBackgroundColor(Color.WHITE);
//监听 OnTouch 事件 为了实现"移动歌词"功能
myView.setOnTouchListener(this); wm.addView(myView, layoutParams); } @Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_UP:
//getRawX/Y 是获取相对于Device的坐标位置 注意差别getX/Y[相对于View]
layoutParams.x = (int) event.getRawX();
layoutParams.y = (int) event.getRawY();
//更新"桌面歌词"的位置
wm.updateViewLayout(myView,layoutParams);
//以下的removeView 能够去掉"桌面歌词"
//wm.removeView(myView);
break;
case MotionEvent.ACTION_MOVE:
layoutParams.x = (int) event.getRawX();
layoutParams.y = (int) event.getRawY();
wm.updateViewLayout(myView,layoutParams);
break;
}
return false;
}
//继承 TextView 好吧,貌似有点多此一举,事实上直接用TextView就好
public class MyView extends TextView{
public MyView(Context context) {
super(context);
}
}
}

------------Update 补充  ------

还要加入权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

MIUI 则还要在设置中打开同意弹出悬浮窗的权限

完整代码:https://github.com/MummyDing/DisplayLyricsonDesktop

【转载请注明出处】

Author: MummyDing

出处:http://blog.csdn.net/mummyding/article/details/

【Android】桌面歌词悬浮效果简单实现的更多相关文章

  1. Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果

    大家好,今天给大家带来一个仿360手机卫士悬浮窗效果的教程,在开始之前请允许我说几句不相干的废话. 不知不觉我发现自己接触Android已有近三个年头了,期间各种的成长少不了各位高手的帮助,总是有很多 ...

  2. android桌面悬浮窗仿QQ手机管家加速效果

    主要还是用到了WindowManager对桌面悬浮进行管理. 需要一个火箭的悬浮窗 一个发射台悬浮窗  ,判断火箭是否放到了发射台,如果放上了,则使用AsyTask 慢慢将火箭的图片往上移.结束后., ...

  3. Android -- 桌面悬浮,QQ管家火箭实现

    续上一篇博客<Android -- 桌面悬浮,仿360>,传送门:http://www.cnblogs.com/yydcdut/p/3909888.html,在此代码上继续添加实现. 比起 ...

  4. Android -- 桌面悬浮,仿360

    实现原理                                                                               这种桌面悬浮窗的效果很类似与Wid ...

  5. Android 仿美团网,大众点评购买框悬浮效果之修改版

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...

  6. Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...

  7. Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming),请尊重他人的辛勤劳动成果,谢谢! 随着移动互联网的快速发展,它已经和我们的生活息息相关了,在 ...

  8. Android桌面悬浮清内存app概述

    今天闲来无事写了一个清内存的小东西,类似360,在桌面上悬浮,点击后清除后台无用程序,清除后台程序是通过调用ActivityManger.killBackgroundProcesses的方式来进行的, ...

  9. Android 应用内悬浮控件实践总结

    在工作中遇到一个需求,需要在整个应用的上层悬浮显示控件,目标效果如下图: 首先想到的是申请悬浮窗权限,OK~ 打开搜索引擎,映入眼帘的并不是如何申请,而是“Android 悬浮窗权限各机型各系统适配大 ...

随机推荐

  1. hdu 1754 I Hate It 线段树 点改动

    // hdu 1754 I Hate It 线段树 点改动 // // 不多说,裸的点改动 // // 继续练 #include <algorithm> #include <bits ...

  2. 用jquery ajax做的select菜单,选中的效果

    //用server端语言赋值给js变量     var departmentId = '<%=提交的值 %>', deviceId='<%=提交的值 %>'     $(fun ...

  3. ubuntu解压命令全览(rar)

    sudo apt-get install p7zip-full Ubuntu下解压rar文件的方法 2010-05-13 12:47 一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了 ...

  4. 【刷题笔记】LeetCode 222. Count Complete Tree Nodes

    题意 给一棵 complete binary tree,数数看一共有多少个结点.做题链接 直观做法:递归 var countNodes = function(root) { if(root===nul ...

  5. BZOJ 1818 线段树+扫描线

    思路: 可以把题目转化成 给你一些沿坐标轴方向的线段 让你求交点个数 然后就线段树+扫描线 搞一搞 (线段不包含断点 最后+n 这种方式 比线段包含断点+各种特判要好写得多) //By SiriusR ...

  6. Java 系列之Filter(一)

    一.过滤器 过滤器就是在源数据和目的数据之间起过滤作用的中间组件.它可以截取客户端和资源之间的请求和响应信息,并且对这些信息进行过滤. 二.应用场景 1.对用户请求进行统一认证 2.对用户的访问请求进 ...

  7. Authrize特性登录验证

  8. vue2.0中关于active-class

    一.首先,active-class是什么, active-class是vue-router模块的router-link组件中的属性,用来做选中样式的切换: 相关可查阅文档:https://router ...

  9. struts2的DTD配置文件

    新手可以看看,高手可以跳过…… 最近在学习struts2这个框架,自己也动手写过一些DTD文件,所以很好struts2这个DTD文件是怎么写的,接下来就一个一个的分析 根元素是struts,然后又4个 ...

  10. 51nod 237 最大公约数之和 V3 杜教筛

    Code: #include <bits/stdc++.h> #include <tr1/unordered_map> #define setIO(s) freopen(s&q ...