Andorid 任意介面懸浮窗,實現懸浮窗如此簡單

2021-09-14 04:36:09 字數 3815 閱讀 4017

1.支援拖動,提供自動貼邊等動畫

2.內部自動進行許可權申請操作

3.可自由指定要顯示懸浮窗的介面

4.應用退到後台時,懸浮窗會自動隱藏

5.位置不可變的懸浮窗無需許可權申請

6.位置及寬高可設定百分比值,輕鬆適配各解析度

7.鏈式呼叫,簡潔清爽

第 1 步、在工程的 build.gradle 中新增:

allprojects }}

第 2 步、在應用的 build.gradle 中新增:

dependencies
0.宣告許可權

1.建立懸浮控制項

floatwindow

.setview(view)

.build();

setview 方法可設定 view 子類或 xml 布局。

2.控制項寬高

floatwindow

.setview(view)

.setwidth(100) //100px

.setheight(screen.width,0.2f) //螢幕寬度的 20%

.build();

可設定具體數值或螢幕寬/高百分比,預設為 wrap_content。

3.顯示位置

floatwindow

.setview(view)

.setx(100) //100px

.sety(screen.width,0.2f) //螢幕寬度的 20%

.build();

可設定具體數值或螢幕寬/高百分比,預設為 0,以螢幕左上角為原點。

4.指定介面顯示

floatwindow

.setview(view)

.setfilter(true, a_activity.class, c_activity.class)

.build();

此方法表示 a_activity、c_activity 顯示懸浮窗,其他介面隱藏。

.setfilter(false, b_activity.class)
此方法表示 b_activity 隱藏懸浮窗,其他介面顯示。

注意:setfilter 方法引數可以識別該 activity 的子類

也就是說,如果 a_activity、c_activity 繼承自 baseactivity,你可以這樣設定:

.setfilter(true, baseactivity.class)
5.可拖動懸浮窗

floatwindow

.setview(view)

.setmovetype(movetype.slide) //可拖動,釋放後自動貼邊

.build();

共提供 4 種 movetype :

movetype.slide : 可拖動,釋放後自動貼邊

movetype.back : 可拖動,釋放後自動回到原位置

movetype.active : 可拖動

movetype.free : 不可拖動,但可改變位置

如不設定,則為 fixed 模式,不可改變位置。

6.懸浮窗動畫

floatwindow

.setview(view)

.setmovetype(movetype.slide)

.setmovestyle(500, new accelerateinterpolator()) //貼邊動畫時長為500ms,加速插值器

.build();

自定義貼邊或回到原位置過程的動畫效果,只在 movetype.slide 或 movetype.back 模式下設定此項才有意義。預設減速插值器,預設動畫時長為 300ms。

7.後續操作

//手動控制

floatwindow.get().show();

floatwindow.get().hide();

//修改顯示位置

floatwindow.get().updatex(100);

floatwindow.get().updatey(100);

//銷毀

floatwindow.destroy();

以上操作應待懸浮窗初始化後進行,注意不能對 fixed 模式懸浮窗修改顯示位置。

8.多個懸浮窗

floatwindow

.setview(imageview)

.build();

floatwindow

.setview(button)

.settag("new")

.build();

floatwindow.get("new").show();

floatwindow.get("new").hide();

floatwindow.destroy("new");

建立第乙個懸浮窗不需加 tag,之後再建立就需指定唯一 tag ,以此區分,方便進行後續操作。

此效果實現全部**為下:

floatwindow

.setview(imageview)

.setwidth(screen.width,0.2f)

.setheight(screen.width,0.2f)

.setx(screen.width,0.7f)

.sety(screen.height,0.2f)

.setmovetype(movetype.back)

.setmovestyle(300,null)

.setfilter(true,a_activity.class,c_activity.class)

.build();

v1.0.61.支援懸浮窗拖動及相關動效

2.位置及寬高可設定百分比值

3.更改相關類名及使用方法

v1.0.5

1.修復未呼叫show顯示懸浮窗bug

v1.0.4

1.返回桌面將會自動隱藏控制項,無需再監聽應用退到後台等操作

2.新增 activity 過濾器,可自由指定哪些介面顯示,哪些介面不顯示

3.fixedfloatwindow 類改為 ffwindow

v1.0.3

1.修復已知 bug

2.新增 dismiss 方法

3.新增其他方案,如:所有版本都申請許可權

vc 實現懸浮窗,迅雷360懸浮球效果

1.setwindowrgn建立圓角懸浮窗dlgfloat rgn.createroundrectrgn rect.left,rect.top,rect.width rect.height 13,13 m rgnwnd.deleteobject m rgnwnd.createrectrgn 0,0,...

vue 側邊懸浮 vue實現移動端懸浮窗效果

本文講述,在使用vue的移動端實現類似於iphone的懸浮窗的效果。相關知識點 touchstart當在螢幕上按下手指時觸發 touchmove 當在螢幕上移動手指時觸發 touchend 當在螢幕上抬起手指時觸發 mousedown mousemove mouseup對應的是pc端的事件 touc...

vue 側邊懸浮 vue實現移動端懸浮窗效果

本文講述,在使用vue的移動端實現類似於iphone的懸浮窗的效果。相關知識點 touchstart當在螢幕上按下手指時觸發 touchmove 當在螢幕上移動手指時觸發 touchend 當在螢幕上抬起手指時觸發 mousedown mousemove mouseup對應的是pc端的事件 touc...