前段時間搗鼓出Android懸浮視窗的實現,今天抽空寫了一個可自由移動懸浮視窗的Demo。
簡要說明如下:
1、通過覆寫懸浮View中onTouchEvent方法實現自由移動懸浮視窗。
2、懸浮視窗座標的移動實際是windowMananager.LayoutParams中x和y的變換,但是要注意設定相應的gravity。
3、用windowManager建立的View,當不需要時,務必記住使用windowManager的removeView方法來移除,請在Activity相關生命週期中自行添加掃尾工作。
4、代碼中已經附上詳細注釋。有關參數具體含義,請自行參考SDK。
Demo源碼
===============================
注意Demo中wmParams.format=1的屬性(我源碼中打了雙斜杠),如果啟用,圖片背景將會透明,如下:
================================
一些說明:
對於種種原因沒有查看SDK文檔的一些朋友,可能對我源碼中wmParams.type=2002這樣的語句不太瞭解其2002的具體意義,給出可讀性好點的語句。
如下:
wmParams.type=LayoutParams.TYPE_PHONE; //wmParams.format=PixelFormat.RGBA_8888; //設定圖片格式,效果為背景透明 wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE; /* * 下面的flags屬性的效果形同“鎖定”。 * 懸浮窗不可觸摸,不接受任何事件,同時不影響後面的事件響應。 wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE; */