【Android】桌面歌词悬浮效果简单实现
2015-07-16 09:58
507 查看
在使用"网易云音乐"的时候,发现有一个显示"桌面歌词"的功能,于是就想着自己实现下。查了下资料,是用WindowManage实现的。实现过程中也出现了些问题,看了官方文档,也算解决了。这里贴上简单代码。
------------Update 补充 ------
还要添加权限
MIUI 则还要在设置中打开允许弹出悬浮窗的权限
完整代码:https://github.com/MummyDing/DisplayLyricsonDesktop
【转载请注明出处】
Author: MummyDing
出处:http://blog.csdn.net/mummyding/article/details/
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 Studio 的 git hub 功能
- 优化Android Studio/Gradle构建
- Android多媒体高级编程(一)——Camera和简单的图像处理
- android之ScrollView里嵌套ListView
- android ndk jni 字符串 String jstring
- Android ListView滑动过程中控件显示重复/错误问题之原理分析...
- Android 自定义圆形图片和文本
- Android ant自动打包APK
- Android ListView滑动过程中图片显示重复错位闪烁问题解决
- Android Studio 设置内存大小及原理
- GitHub 优秀的 Android 开源项目
- Android HandlerThread 的使用及其Demo
- android 仿EF看视频弹出练习功能
- Android Studio
- 从设计到实现,一步步教你实现Android-Universal-ImageLoader-工具类
- Android Fragment使用
- Android中使用OnClickListener接口实现按钮点击的低级失误
- Android studio 解决libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
- Android 不规则封闭区域填充 手指秒变油漆桶
- Android view动画问题