Skip to content

Commit 66ce57b

Browse files
committed
新增支持设置画面低延迟开关方法
1 parent 8e61c96 commit 66ce57b

3 files changed

Lines changed: 56 additions & 17 deletions

File tree

README-en.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,10 +285,12 @@ easyWindow.setButtonBrightness(@FloatRange(from = -1.0, to = 1.0) float buttonBr
285285
easyWindow.setPreferredRefreshRate(float preferredRefreshRate);
286286
// Set color mode
287287
easyWindow.setColorMode(int colorMode);
288-
// Set blur radius behind the window (supported on Android 12+)
289-
easyWindow.setBlurBehindRadius(@IntRange(from = 0) int blurBehindRadius);
290288
// Set screen orientation for the floating window
291289
easyWindow.setScreenOrientation(int screenOrientation);
290+
// Set low latency mode for the window (supported on Android 11+)
291+
easyWindow.setPreferMinimalPostProcessing(boolean enabled);
292+
// Set blur radius behind the window (supported on Android 12+)
293+
easyWindow.setBlurBehindRadius(@IntRange(from = 0) int blurBehindRadius);
292294

293295
// Set the visibility of the window view
294296
easyWindow.setWindowViewVisibility(int visibility);

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,10 +291,12 @@ easyWindow.setButtonBrightness(@FloatRange(from = -1.0, to = 1.0) float buttonBr
291291
easyWindow.setPreferredRefreshRate(float preferredRefreshRate);
292292
// 设置悬浮窗的颜色模式
293293
easyWindow.setColorMode(int colorMode);
294-
// 设置悬浮窗背后的高斯模糊半径大小(Android 12 及以上才支持)
295-
easyWindow.setBlurBehindRadius(@IntRange(from = 0) int blurBehindRadius);
296294
// 设置悬浮窗屏幕方向
297295
easyWindow.setScreenOrientation(int screenOrientation);
296+
// 设置悬浮窗画面低延迟开关(Android 11 及以上才支持)
297+
easyWindow.setPreferMinimalPostProcessing(boolean enabled);
298+
// 设置悬浮窗背后的高斯模糊半径大小(Android 12 及以上才支持)
299+
easyWindow.setBlurBehindRadius(@IntRange(from = 0) int blurBehindRadius);
298300

299301
// 设置悬浮窗可见性
300302
easyWindow.setWindowViewVisibility(int visibility);

library/src/main/java/com/hjq/window/EasyWindow.java

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,54 @@ public X setColorMode(int colorMode) {
595595
return (X) this;
596596
}
597597

598+
/**
599+
* 设置悬浮窗屏幕方向
600+
*
601+
* 自适应:{@link ActivityInfo#SCREEN_ORIENTATION_UNSPECIFIED}
602+
* 横屏:{@link ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}
603+
* 竖屏:{@link ActivityInfo#SCREEN_ORIENTATION_PORTRAIT}
604+
*/
605+
public X setScreenOrientation(int screenOrientation) {
606+
mWindowParams.screenOrientation = screenOrientation;
607+
delayUpdate();
608+
return (X) this;
609+
}
610+
611+
/**
612+
* 设置悬浮窗画面低延迟开关(Android 11 及以上才支持)
613+
*
614+
* 这个 API 就是让你的 App(比如游戏、视频会议)告诉手机 / 电视:
615+
* “我要最低延迟,别搞那些花里胡哨的画质处理!”,
616+
* 让设备把多余的画面后期处理关掉,优先保证操作和画面的响应速度。
617+
*
618+
* 1. 设备本身的 “坏习惯”:
619+
* 现在的手机、电视 / 显示器,为了让你看视频、图片的画质更好,会偷偷给画面做 “后期处理”,比如锐化、降噪、色彩增强、运动补偿……
620+
* 这些处理会让画面更好看,但都要花时间,结果就是你点一下屏幕、按一下手柄,画面要等几十毫秒才反应过来,这就是 “延迟”。
621+
*
622+
* 2. 游戏 / 视频会议的痛点:
623+
* 玩游戏时:你按了攻击键,结果半秒后角色才挥刀,就很容易输。
624+
* 视频会议时:你说话,对方的嘴型过了一会儿才对上,体验很差。
625+
* 这些场景里,“快” 比 “画质好” 重要得多。
626+
*
627+
* 3. 这个 API 的作用
628+
* 当你调用 setPreferMinimalPostProcessing(true) 时,就是在给设备发信号:
629+
* “我这个 App 现在很需要低延迟,麻烦把那些画质增强的后期处理都关了!
630+
* 如果你的显示器 / 电视支持 HDMI 2.1 的 ALLM(自动低延迟模式,也就是常说的游戏模式),也帮我把它打开!”
631+
*
632+
* 4. 为什么还有限制?
633+
* 它不是 100% 生效的,有两个 “无效场景”:
634+
* 你的设备 / 外接显示器根本不支持这个功能(比如老电视、非 HDMI 2.1 的设备)。
635+
* 用户自己在系统设置里手动关掉了 “低延迟 / 游戏模式” 的开关。
636+
* 这时候你调用这个 API,设备会直接无视你的请求,还是按原来的方式处理画面。
637+
*/
638+
public X setPreferMinimalPostProcessing(boolean enabled) {
639+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
640+
mWindowParams.preferMinimalPostProcessing = enabled;
641+
delayUpdate();
642+
}
643+
return (X) this;
644+
}
645+
598646
/**
599647
* 设置悬浮窗背后的高斯模糊半径大小(Android 12 及以上才支持)
600648
*
@@ -612,19 +660,6 @@ public X setBlurBehindRadius(@IntRange(from = 0) int blurBehindRadius) {
612660
return (X) this;
613661
}
614662

615-
/**
616-
* 设置悬浮窗屏幕方向
617-
*
618-
* 自适应:{@link ActivityInfo#SCREEN_ORIENTATION_UNSPECIFIED}
619-
* 横屏:{@link ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}
620-
* 竖屏:{@link ActivityInfo#SCREEN_ORIENTATION_PORTRAIT}
621-
*/
622-
public X setScreenOrientation(int screenOrientation) {
623-
mWindowParams.screenOrientation = screenOrientation;
624-
delayUpdate();
625-
return (X) this;
626-
}
627-
628663
/**
629664
* 重新设置 WindowManager 参数集
630665
*/

0 commit comments

Comments
 (0)