EasyFloat icon indicating copy to clipboard operation
EasyFloat copied to clipboard

能否加个设置悬浮窗不拦截触摸事件

Open zhouzhuo810 opened this issue 4 years ago • 8 comments

比如悬浮窗不需要任何操作,只用做显示,但是挡住了某些非悬浮窗的内容,导致非悬浮窗内容无法点击和滑动。

请问这种有解决方案么?

zhouzhuo810 avatar Sep 16 '21 09:09 zhouzhuo810

有同样的需求

zhao-pf avatar Sep 26 '21 05:09 zhao-pf

同求

wj-stack avatar Jun 01 '22 15:06 wj-stack

解决了。重写 OnFloatAnimator 加一个 FLAG_NOT_TOUCHABLE

    class Animator implements OnFloatAnimator {

        @Nullable
        @Override
        public android.animation.Animator enterAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
            return null;
        }

        @Nullable
        @Override
        public android.animation.Animator exitAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

            return null;
        }
    }
    EasyFloat.with(this).setLayout(layout)
            .setShowPattern(ShowPattern.ALL_TIME)
            .setAnimator(new Animator()) // 在这里设置穿透鼠标
            .setTag("DrawFloat")
            .setDragEnable(false)
            .show();

wj-stack avatar Jun 02 '22 00:06 wj-stack

解决了。重写 OnFloatAnimator 加一个 FLAG_NOT_TOUCHABLE

    class Animator implements OnFloatAnimator {

        @Nullable
        @Override
        public android.animation.Animator enterAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
            return null;
        }

        @Nullable
        @Override
        public android.animation.Animator exitAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

            return null;
        }
    }
    EasyFloat.with(this).setLayout(layout)
            .setShowPattern(ShowPattern.ALL_TIME)
            .setAnimator(new Animator()) // 在这里设置穿透鼠标
            .setTag("DrawFloat")
            .setDragEnable(false)
            .show();

原理是这样的,我是直接加了一个方法控制,因为我要动态设置是否可触摸。

zhouzhuo810 avatar Jun 09 '22 12:06 zhouzhuo810

我想实现悬浮窗内Listview上下滑动,同求

ahyangnb avatar Aug 26 '22 06:08 ahyangnb

解决了。重写 OnFloatAnimator 加一个 FLAG_NOT_TOUCHABLE

    class Animator implements OnFloatAnimator {

        @Nullable
        @Override
        public android.animation.Animator enterAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
            return null;
        }

        @Nullable
        @Override
        public android.animation.Animator exitAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

            return null;
        }
    }
    EasyFloat.with(this).setLayout(layout)
            .setShowPattern(ShowPattern.ALL_TIME)
            .setAnimator(new Animator()) // 在这里设置穿透鼠标
            .setTag("DrawFloat")
            .setDragEnable(false)
            .show();

Android 12好像无效哦

lxygithub avatar Dec 09 '22 06:12 lxygithub

解决了。重写 OnFloatAnimator 加一个 FLAG_NOT_TOUCHABLE

    class Animator implements OnFloatAnimator {

        @Nullable
        @Override
        public android.animation.Animator enterAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
            return null;
        }

        @Nullable
        @Override
        public android.animation.Animator exitAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

            return null;
        }
    }
    EasyFloat.with(this).setLayout(layout)
            .setShowPattern(ShowPattern.ALL_TIME)
            .setAnimator(new Animator()) // 在这里设置穿透鼠标
            .setTag("DrawFloat")
            .setDragEnable(false)
            .show();

Android 12好像无效哦

那是因为需要设置下WindowManager.LayoutParams的不透明度

zhouzhuo810 avatar Dec 10 '22 08:12 zhouzhuo810

解决了。重写 OnFloatAnimator 加一个 FLAG_NOT_TOUCHABLE

    class Animator implements OnFloatAnimator {

        @Nullable
        @Override
        public android.animation.Animator enterAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
            return null;
        }

        @Nullable
        @Override
        public android.animation.Animator exitAnim(@NonNull View view, @NonNull WindowManager.LayoutParams layoutParams, @NonNull WindowManager windowManager, @NonNull SidePattern sidePattern) {
            layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

            return null;
        }
    }
    EasyFloat.with(this).setLayout(layout)
            .setShowPattern(ShowPattern.ALL_TIME)
            .setAnimator(new Animator()) // 在这里设置穿透鼠标
            .setTag("DrawFloat")
            .setDragEnable(false)
            .show();

Android 12好像无效哦

那是因为需要设置下WindowManager.LayoutParams的不透明度

这个透明度限制果然还是绕不过去啊

lxygithub avatar Jan 05 '23 01:01 lxygithub