随着Android手机的屏幕越来越大,Android浮动窗口的应用也越来越多。像经常会用到的,音乐播放器的桌面歌词以及一些手机卫士软件,像腾讯手机管家的小火箭清理内存,都应用到了浮动窗口的原理,今天拿来桌面歌词做一个简单的记录,举一反三即可实现类似的应用。效果图如下:
一、浮动窗口的实现
1.首先我们要申请权限,以便我们可以实现浮动窗口的拖拽
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2.接下来,我们在service中的OnCreate方法显示浮动窗口,在OnDestory方法中关闭浮动窗口,这样我们的浮动窗口就可以与Service保持相同的生命周期。
3.显示浮动窗口:首先通过getApplicationContext().getSystemService(WINDOW_SERVICE)方法我们可以获得窗口管理类,接下来我们需要设置窗口的params,设置其类型为系统级,否则无法显示;设置焦点,否则无法获得触摸事件;最后通过wm.addView(tv, params)方法将我们的View添加到窗口中。
4.窗口的拖拽:在这里我们重新写一个TextView来放置我们的歌词,并在onTouchEvent中响应触摸事件,获得触摸点的移动来计算触摸点的移动,并重新设置窗口的位置,在这里需要注意,MotionEvent中的RawX,RawY是相对屏幕左上角的坐标(包括状态栏高度),而X,Y是相对于容器本身的坐标,即TextView左上角的坐标。这样利用RawX-X既可以得到TextView左上角点的屏幕x坐标,RawY-Y-状态栏高即可获得TextView左上角点的屏幕y坐标。之后我们调用wm.updateViewLayout(this, params)进行更新。
二、渲染歌词的实现
通过一个Shader shader = new LinearGradient(0, 0, len, 0, new int[] {Color.YELLOW, Color.RED }, new float[] { one, two },TileMode.CLAMP)可以进行歌词的渲染,其中前四个参数表示从哪里渲染到哪里,第5个参数为渲染的两种不同颜色, 第6个参数表示渲染的相对长度,范围从0到1, 第7个参数表示模式。我们可以