getActivity / EasyWindow

Android 悬浮窗框架,好用不解释
Apache License 2.0
1.46k stars 162 forks source link

[疑惑]:EasyWindow 在多个Activity中展示的时候 切换 activity 保存坐标问题 #48

Closed houkhan closed 1 year ago

houkhan commented 1 year ago

问题描述【必填】

EasyWindow 在多个Activity中展示的时候 切换 activity 后 如果不保存坐标 回到了默认的地方 我在设置了

.setOnTouchListener { window, _, _ ->
                            LogUtils.dTag(TAG, "setOnTouchListener--mWindowParams!=null")
                            mWindowParams = window.windowParams
                            true
                        }

发现没有触发 我需要在什么时机获取并保存 windowParams

另外 我在 使用了 setOnClickListener 确保 了 mWindowParams 可以赋值 但是这个时候 setWindowParams(mWindowParams) 后 悬浮窗找不到了

setOnClickListener { window, view ->
                            LogUtils.dTag(TAG, "setOnClickListener--mWindowParams!=null")
                            mWindowParams = window.windowParams
                        }

我的完整代码如下 请教下大佬 我该在什么时机 获取并保存 windowParams 获取后 直接设置 .setWindowParams(mWindowParams) 是有什么问题吗 为什么会找不到了呢

object FloatViewUtils {
    private const val TAG = "FloatViewUtils"
    private var mWindowParams: WindowManager.LayoutParams? = null
    fun initFloat() {
        // 注册Activity生命周期监听
        registerActivityLifecycleCallbacks()
    }

    /**
     * 注册Activity生命周期监听
     */
    private fun registerActivityLifecycleCallbacks() {
        Abase.app.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
                LogUtils.dTag(TAG, "onActivityCreated--${activity.localClassName}")
            }

            override fun onActivityStarted(activity: Activity) {
                LogUtils.dTag(TAG, "onActivityStarted--${activity.localClassName}")
            }

            override fun onActivityResumed(activity: Activity) {
                LogUtils.dTag(TAG, "onActivityResumed--${activity.localClassName}")
                if (mWindowParams == null) {
                    LogUtils.dTag(TAG, "onActivityResumed--${activity.localClassName}--mWindowParams==null")
                    EasyWindow.with(activity)
                        .setContentView(R.layout.float_download)
                        .setDraggable(SpringDraggable())
                        .setGravity(Gravity.END or Gravity.CENTER_VERTICAL)
                        .setTag(activity.localClassName)
                        .setOnClickListener { window, view ->
                            LogUtils.dTag(TAG, "setOnClickListener--mWindowParams==null")
                            mWindowParams = window.windowParams
                        }
                        /*.setOnTouchListener { window, _, _ ->
                            LogUtils.dTag(TAG, "setOnTouchListener--mWindowParams==null")
                            mWindowParams = window.windowParams
                            true
                        }*/
                        .show()
                } else {
                    LogUtils.dTag(TAG, "onActivityResumed--${activity.localClassName}--mWindowParams!=null")
                    EasyWindow.with(activity)
                        .setContentView(R.layout.float_download)
                        .setDraggable(SpringDraggable())
                        .setWindowParams(mWindowParams)
                        .setTag(activity.localClassName)
                        .setOnClickListener { window, view ->
                            LogUtils.dTag(TAG, "setOnClickListener--mWindowParams!=null")
                            mWindowParams = window.windowParams
                        }
                        /*.setOnTouchListener { window, _, _ ->
                            LogUtils.dTag(TAG, "setOnTouchListener--mWindowParams!=null")
                            mWindowParams = window.windowParams
                            true
                        }*/
                        .show()
                }
            }

            override fun onActivityPaused(activity: Activity) {
                LogUtils.dTag(TAG, "onActivityPaused--${activity.localClassName}")
                EasyWindow.cancelByTag(activity.localClassName)
                EasyWindow.recycleByTag(activity.localClassName)
            }

            override fun onActivityStopped(activity: Activity) {
                LogUtils.dTag(TAG, "onActivityStopped--${activity.localClassName}")
            }

            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
                LogUtils.dTag(TAG, "onActivitySaveInstanceState--${activity.localClassName}")
            }

            override fun onActivityDestroyed(activity: Activity) {
                LogUtils.dTag(TAG, "onActivityDestroyed--${activity.localClassName}")
            }

        })
    }
}

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

getActivity commented 1 year ago

小伙子,不好意思,最近工作比较忙,加上提 issue 的人比较多,不小心把你漏掉了

getActivity commented 1 year ago

EasyWindow-10.5.aar.zip

getActivity commented 1 year ago
image image

小伙子, 你可以下载上面的 aar 包,我在 setOnWindowLifecycle 加了一个窗口更新回调,你可以直接在这个回调中做坐标的更新。

getActivity commented 1 year ago

小伙子,远程依赖已经更新,更新到 10.5 版本即可。