http://blog.csdn.net/guolin_blog/article/details/16919859
這次我們将代碼的重點放在火箭升空的效果上,是以簡單起見,就直接在模仿360手機衛士懸浮窗的那份代碼的基礎上繼續開發了,如果你還沒有看過那篇文章的話,建議先去閱讀 android桌面懸浮窗效果實作,仿360手機衛士懸浮窗效果 。
比起普通的桌面懸浮窗,現在我們需要在拖動懸浮窗的時候将懸浮窗變成一個小火箭,并且在螢幕的底部添加一個火箭發射台。那麼我們就從火箭發射台開始編寫吧,首先建立launcher.xml作為火箭發射台的布局檔案,如下所示:
[html] view
plaincopy
<?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檔案中記得要聲明兩個權限,如下所示:
<uses-permission android:name="android.permission.system_alert_window" />
<uses-permission android:name="android.permission.get_tasks" />
代碼就隻有這麼多,接下來我們運作一下看看效果吧。在主界面點選start float window按鈕可以開啟懸浮窗并回到桌面,然後拖動懸浮窗後就會變成小火箭的狀态,将它拖動到螢幕底部火箭發射台上,然後放手,小火箭就會騰空而起了,如下圖所示:
下載下傳:http://download.csdn.net/detail/sinyu890807/6786059