1.支持拖動,提供自動貼邊等動畫java
2.內部自動進行權限申請操做android
3.可自由指定要顯示懸浮窗的界面git
4.應用退到後臺時,懸浮窗會自動隱藏github
5.位置不可變的懸浮窗無需權限申請maven
6.位置及寬高可設置百分比值,輕鬆適配各分辨率ide
7.鏈式調用,簡潔清爽佈局
第 1 步、在工程的 build.gradle 中添加:gradle
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
第 2 步、在應用的 build.gradle 中添加:動畫
dependencies { compile 'com.github.yhaolpz:FloatWindow:1.0.6' }
0.聲明權限ui
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
1.建立懸浮控件
FloatWindow .with(getApplicationContext()) .setView(view) .build();
setView 方法可設置 View 子類或 xml 佈局。
2.控件寬高
FloatWindow .with(getApplicationContext()) .setView(view) .setWidth(100) //100px .setHeight(Screen.width,0.2f) //屏幕寬度的 20% .build();
可設置具體數值或屏幕寬/高百分比,默認爲 wrap_content。
3.顯示位置
FloatWindow .with(getApplicationContext()) .setView(view) .setX(100) //100px .setY(Screen.width,0.2f) //屏幕寬度的 20% .build();
可設置具體數值或屏幕寬/高百分比,默認爲 0,以屏幕左上角爲原點。
4.指定界面顯示
FloatWindow .with(getApplicationContext()) .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 .with(getApplicationContext()) .setView(view) .setMoveType(MoveType.slide) //可拖動,釋放後自動貼邊 .build();
共提供 4 種 MoveType :
MoveType.slide : 可拖動,釋放後自動貼邊
MoveType.back : 可拖動,釋放後自動回到原位置
MoveType.active : 可拖動
MoveType.free : 不可拖動,但可改變位置
如不設置,則爲 fixed 模式,不可改變位置。
6.懸浮窗動畫
FloatWindow .with(getApplicationContext()) .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 .with(getApplicationContext()) .setView(imageView) .build(); FloatWindow .with(getApplicationContext()) .setView(button) .setTag("new") .build(); FloatWindow.get("new").show(); FloatWindow.get("new").hide(); FloatWindow.destroy("new");
建立第一個懸浮窗不需加 tag,以後再建立就需指定惟一 tag ,以此區分,方便進行後續操做。
此效果實現所有代碼爲下:
FloatWindow .with(getApplicationContext()) .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();
在 sample 中也有示例代碼。
v1.0.6
1.支持懸浮窗拖動及相關動效
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.新增其餘方案,如:全部版本都申請權限