上篇文章介绍了MVVM架构的搭建,这次继续完善Android All Star项目,实现Android All Star的搜索功能。使用Android的过渡框架模仿微信的搜索框,实现两个界面之间搜索框平滑切换的效果
先上最终实现效果图:
过渡框架简介
Android 4.4.2 中引入了 Transition 过渡动画,借助 Android 的过渡框架,只需提供起始布局和结束布局,即可为界面中的各种view切换添加动画效果,从开发的角度来讲,过渡框架就是实现了View树(View Hierarchy)之间的动画切换 。
过渡框架包含以下功能:
- 群组级动画:将一个或多个动画效果应用于视图层次结构中的所有视图。
- 内置动画:对淡出或移动等常见效果使用预定义动画。
- 资源文件支持:从布局资源文件加载视图层次结构和内置动画。
- 生命周期回调:接收可控制动画和层次结构更改流程的回调。
作共享元素过渡为过渡框架中的一部分,可以配置fragment过渡期间相应视图如何在两个fragment之间移动。 例如,您可能希望显示在fragmenA上ImageView中的图像在fragmentB变得可见后过渡到fragmentB,效果见下图:
共享元素过渡的实现
普通方式实现共享元素过渡需要三步:
- 为每个共享元素视图分配一个唯一的过渡名称。
- FragmentTransaction添加共享元素视图和切换后对应共享元素视图的过渡名称。
- 设置共享元素过渡动画。
首先,为了将视图从一个fragment映射到下一个fragment,必须为每个共享元素视图分配唯一的过渡名称。 使用ViewCompat.setTransitionName()为每个fragment布局中的共享元素上设置过渡名称,该方式与API级别14及更高版本兼容。 例如,fragmentA和fragmentB中的ImageView的过渡名称可以如下分配:
class FragmentA : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
...
val itemImageView = view.findViewById<ImageView>(R.id.item_image)
ViewCompat.setTransitionName(itemImageView, “item_image”)
}
}
class FragmentB : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle