在上一篇文章中,我们探讨了如何让软键盘动起来以实现更自然的交互体验。接下来,我们将深入探讨Android 11中新引入的WindowInsetsAnimation类,以及如何使用它来改进软键盘动画效果。让我们首先欣赏一段示例动图,左边展示了运行在Android 10的设备上的动画效果,右边则是Android 11的改进版本,明显增强了平滑性。
如您所见,在Android 10及之前版本中,当用户点击输入框时,软键盘的动画效果从一个状态跳转到另一个状态,显得不够流畅。但在Android 11中,软键盘的动画变得更为平滑,为用户提供了一种更佳的交互体验。实现这一效果的关键在于利用WindowInsetsAnimation类。
通过引入WindowInsetsAnimation类,开发者可以为应用添加更为细腻的动画效果。这一类允许创建涉及视窗属性的动画,并通过WindowInsetsAnimation.Callback监听各种动画事件。只需将此回调设置到视图上,您便能轻松实现所需效果。
接下来,我们来逐步了解回调类及其提供的方法。当当前软键盘关闭,用户点击EditText时,系统将立即显示软键盘,此时设置的WindowInsetsAnimation.Callback将按照顺序触发一系列调用。
了解了回调的工作原理后,我们开始实现示例,使用WindowInsetsAnimation.Callback来达到文章开头展示的效果。首先,我们需要重写onPrepare()方法,记录视图底部的坐标。接着,通过属性分发机制,我们使用OnApplyWindowInsetsListener更新容器视图的内边距,从而触发内容向上移动,但用户在这一阶段看不到明显变化。
紧接着,实现onStart()方法,记录视图结束状态的位置。通过translationY属性,我们确保视图在动画开始时回到初始位置,避免了视觉上的闪烁。由于系统保证了任何因视窗属性变更导致的重新布局都在同一帧被调用,用户不会在这一阶段感到不舒适。
最后,重写onProgress()方法,允许我们在软键盘滑入过程中更新视图。通过在起始和结束状态之间进行插值,并使用translationY属性,视图可以与软键盘一起移动,实现无缝的动画效果。
已通过上述方法实现了软键盘与应用视图的同步。如需查看完整实现示例,请参阅Android官方提供的WindowInsetsAnimation示例。
如果您在应用中应用了上述实现,并愿意分享您的使用感受,欢迎在下方评论区留言。在接下来的文章中,我们将继续探索如何让您的应用更好地控制软键盘,比如在滚动列表时自动打开软键盘,以优化用户体验。
在实现过程中,您可能会遇到视图被裁剪的问题,这通常发生在尝试移动视图时,视图因OnApplyWindowInsetsListener导致的布局改变而被调整大小。在后续的文章中,我们将讨论解决这一问题的方法,并推荐您查看WindowInsetsAnimation示例,其中包含了一个避免视图裁剪的技巧。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。