背景
有一些不错的应用程序在顶部显示一些布局,而用户正在拨打电话或接听电话(如“当前呼叫者 ID ”)。
我需要创建一个能够在通话期间在顶部显示某些内容并允许它进行交互的应用程序。
问题
使用 broadcastReceiver 、前台服务和 SYSTEM_ALERT 权限,我已成功在通话期间在屏幕上显示某些内容。
只要显示的内容是静态的,我就没有问题。
但是,我注意到当我尝试使内容显示为交互式时,我遇到了一些问题:
一切都是跳跃的,这不仅包括动画,还包括将可见性设置为可见/消失。当我需要让事情变得可拖动时,我讨厌思考它会如何工作。
不确定这是否是原因,但使用 SlidingDrawer 使整个宽度属于 SlidingDrawer 并且您无法单击它。这意味着如果它的位置在底部,当有人打电话给你时,你不能触摸“接听”按钮。
问题
这些问题的原因是什么?
我怎样才能修复它们并能够正确显示?
其他应用程序如何正确处理它?
编辑:关于 SlidingDrawer ,它的位置和大小以及内容区域似乎有可怕的错误,即使它没有向用户显示并且用户可以看穿,它也无法被触及。不过,我不知道为什么,以及如何解决它,我也不知道为什么与普通应用程序相比,事情如此跳跃(可能是因为过度绘制,但它真的很慢)。
也许这个问题应该更笼统:如何制作像AirCalc上的浮动窗口,可以轻松移动但仍然相当快。
对于拖动功能,我尝试获取我显示的根视图(类型为 WindowManager.LayoutParams )的 layoutParams,更新它并再次设置它,但由于某种原因它没有做任何事情。想知道我做错了什么。
编辑:看来我应该使用 windowManager.updateViewLayout 来更新 layoutParams。使用这篇文章,我使它完全可以拖动。