天天看点

Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现

http://blog.csdn.net/guolin_blog/article/details/16919859

这次我们将代码的重点放在火箭升空的效果上,因此简单起见,就直接在模仿360手机卫士悬浮窗的那份代码的基础上继续开发了,如果你还没有看过那篇文章的话,建议先去阅读 android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果 。

比起普通的桌面悬浮窗,现在我们需要在拖动悬浮窗的时候将悬浮窗变成一个小火箭,并且在屏幕的底部添加一个火箭发射台。那么我们就从火箭发射台开始编写吧,首先创建launcher.xml作为火箭发射台的布局文件,如下所示:

[html] view

plaincopy

Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现

<?xml version="1.0" encoding="utf-8"?>  

<linearlayout  

    xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="wrap_content"  

    android:layout_height="wrap_content"  

    android:orientation="vertical"  

    >  

    <imageview   

        android:id="@+id/launcher_img"  

        android:layout_width="200dp"  

        android:layout_height="88dp"  

        android:src="@drawable/launcher_bg_hold"  

        />  

</linearlayout>  

可以看到,这里的imageview是用于显示当前火箭发射台状态的。我事先准备好了两张图片,一张是当小火箭未拖动到火箭发射台时显示的,一张是当小火箭拖动到火箭发射台上时显示的。

接下来创建rocketlauncher类,作为火箭发射台的view,代码如下所示:

rocketlauncher中的代码还是非常简单的,在构建方法中调用了layoutinflater的inflate()方法来将launcher.xml这个布局文件加载进来,并获取到了当前view的宽度和高度。在updatelauncherstatus()方法中会进行判断,如果传入的参数是true,就显示小火箭即将发射的图片,如果传入的是false,就显示将小火箭拖动到发射台的图片。

新增的文件只有这两个,剩下的就是要修改之前的代码了。首先修改mywindowmanager中的代码,如下所示:

mywindowmanager是所有桌面悬浮窗的管理器,这里我们主要添加了createlauncher()、removelauncher()和updatelauncher()这几个方法,分别用于创建、移除、以及更新火箭发射台悬浮窗。另外还添加了isreadytolaunch()这个方法,它是用于判断小火箭是否已经拖动到火箭发射台上了。判断的方式当然也很简单,只需要对小火箭的边界和火箭发射台的边界进行检测,判断它们是否相交就行了。

接下来还需要修改floatwindowsmallview中的代码,当手指拖动悬浮窗的时候要将它变成小火箭,如下所示:

这里在代码中添加了一个ispressed标识位,用于判断用户是否正在拖动悬浮窗。当拖动的时候就调用updateviewstatus()方法来更新悬浮窗的显示状态,这时悬浮窗就会变成一个小火箭。然后当手指离开屏幕的时候,也会调用updateviewstatus()方法,这时发现ispressed为false,就会将悬浮窗重新显示出来。

同时,当手指离开屏幕的时候,还会调用mywindowmanager的isreadytolaunch()方法来判断小火箭是否被拖动到火箭发射台上了,如果为true,就会触发火箭升空的动画效果。火箭升空的动画实现是写在launchtask这个任务里的,可以看到,这里会在doinbackground()方法中执行耗时逻辑,将小火箭的纵坐标不断减小,以让它实现上升的效果。当纵坐标减小到0的时候,火箭升空的动画就结束了,然后在onpostexecute()方法中重新将悬浮窗显示出来。

另外,在androidmanifest.xml文件中记得要声明两个权限,如下所示:

Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现

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

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

代码就只有这么多,接下来我们运行一下看看效果吧。在主界面点击start float window按钮可以开启悬浮窗并回到桌面,然后拖动悬浮窗后就会变成小火箭的状态,将它拖动到屏幕底部火箭发射台上,然后放手,小火箭就会腾空而起了,如下图所示:

Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现

下载:http://download.csdn.net/detail/sinyu890807/6786059

继续阅读