0

所以基本上我需要从已经运行的 Activity 更新当前的浮动窗口边界(宽度、高度,也许还有位置)。我需要这个才能从一个屏幕平滑过渡到另一个屏幕。有推荐的方法吗?

谢谢

4

1 回答 1

0

如果您想对通用视图的过渡进行动画处理,您应该考虑所有动画只有在有足够的预留视觉空间来执行它们时才能按预期工作。如果没有足够的视觉空间,动画/过渡会变得缓慢/滞后,因为每个动画帧都应该更改一个或多个边界。

浮动窗口(通常)将其视图边界设置为您所看到的,并且不再保留任何视觉空间来将其调整为更大的尺寸。因此,“RootView.animate().scaleXby(2f)”方法无法按预期工作。

在另一边,您可以成功地为尺寸缩小设置动画,因为较大的尺寸是 RootView 的初始尺寸,因此您可以调用“RootView.animate().scaleXby(0.5f)...”来减小其尺寸而无需任何问题。唯一的问题是在新大小的浮动窗口周围会保留一个透明空间。要解决此问题:在动画结束时,您可以计算尺寸差异并执行“脏” LayoutParams 更新以根据新尺寸调整浮动窗口的大小。

所以最好的解决方案(向上或向下扩展)是:

  1. 浮动窗口应该作为其父级包含在透明视图组中
  2. 将透明视图组设置为全屏尺寸并将内容(您真正想要调整大小的部分)移动到与之前相同的坐标
  3. 做所有动画/调整大小的东西/程序
  4. 当动画/调整大小完成时......
  5. ...将透明视图组设置为新的大小/坐标,然后...
  6. ...设置内容宽度/高度以匹配其父级(即透明视图组)

(初始阶段和最后阶段可能会出现小闪烁效果,但这是我们需要支付的小成本)

于 2019-01-30T10:46:24.900 回答