在使用"网易云音乐"的时候,发现有一个显示"桌面歌词"的功能,于是就想着自己实现下。查了下资料,是用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. EF Code First:实体映射,数据迁移,重构

    经过EF的<第一篇>,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系.实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也都依赖于这 ...

  2. hdu 1166 敌兵布阵——(区间和)树状数组/线段树

    pid=1166">here:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Input 第一行一个整数T.表示有T组数据. 每组数据第一 ...

  3. layer iframe加载单个图片或者加载页面

    加载单个图片 layer.open({ type: , title: false, closeBtn: , area: '150px', skin: 'layui-layer-nobg', //没有背 ...

  4. 【POJ 2482】 Stars in Your Windows

    [题目链接] http://poj.org/problem?id=2482 [算法] 线段树 + 扫描线 [代码] #include <algorithm> #include <bi ...

  5. DB-MySQL:MySQL 索引

    ylbtech-DB-MySQL:MySQL 索引 1.返回顶部 1. MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果 ...

  6. shell脚本创建和执行

    shell脚本并不能作为正式的编程语言,因为它是在Linux的shell中运行的,所以称他为shell脚本. 事实上,shell脚本就是一些命令的集合. 我们不妨吧所有的操作都记录到一个文档中,然后去 ...

  7. SSH不允许进行DNS解析

    ssh设置DNS不解析 sed -i "s/#UseDNS yes/UseDNS no/"  /etc/ssh/sshd_config/etc/init.d/sshd restar ...

  8. 19.QT对话框(文件对话框,颜色对话框,字体框,自定义对话框)

    文件对话框 #include<QFileDialog> //文件对话框 void Dialog::on_pushButton_clicked() { //定义显示文件的类型 窗口标题 可供 ...

  9. layedit图片上传接口案列

    html部分 <divclass="layui-form-item"> <labelfor="tname"class="layui- ...

  10. 关于C语言中EOF的一点认识

    总结来说:EOF(即End Of File)是一个文件结束的标记,当文件被读取到EOF位置时,参与读取的函数会返回整型值 -1,这时要注意的是:这个值被赋值给有符号char类型时是0xff,被赋值给有 ...