Kotlin--›Android Activity/Fragment转场动画极简使用方法

在这里插入图片描述

Activity之间共享元素实现的转场动画, 需要API>=21才支持.

但是 转场动画support包里面提供了支持. 所以没有API 21的限制.

可以参考Transition转场动画的文章: https://blog.csdn.net/angcyo/article/details/90288786


Activity共享元素

步骤1

启动新的 Activity 时, 指定 options

参考类:

ActivityCompat.startActivity(@NonNull Context context, @NonNull Intent intent, @Nullable Bundle options)

options的获取:

ActivityOptionsCompat.makeSceneTransitionAnimation(@NonNull Activity activity, Pair<View, String>... sharedElements)

封装后:

AHelper().apply {
     activity = this@MainActivity
     transitionView(image_view, "image_view")
     transitionView(text_view, "text_view")
     start {
         Intent(this@MainActivity, Activity2::class.java)
     }
 }

步骤2

在新的Activity里面指定相同名字的transitionName

也可以用代码的方式设置:

ViewCompat.setTransitionName(@NonNull View view, String transitionName)

同时设置动画, 通过ActivityWindow对象

window.setEnterTransition
window.setExitTransition

window.setSharedElementExitTransition
window.setSharedElementEnterTransition

封装后:

AHelper().apply {
     activity = this@Activity2
     transitionView(image_view, "image_view")
     transitionView(text_view, "text_view")
     defaultTransition()
     doIt()
 }

Fragment共享元素

注意:这玩意坑特么多.

  1. 必须使用replace的方式启动新的Fragment才有效
  2. replace之前, 必须已经有一个或者多个FragmentFragmentManager里面
  3. back操作不支持动画

步骤1

添加共享元素:

FragmentTransaction.addSharedElement(@NonNull View var1, @NonNull String var2);

封装后:

FHelper().apply {
     fragmentManager = getFragmentManager()
     transitionView(image_view, "image_view")
     transitionView(text_view, "text_view")
     start {
         replace(R.id.root_layout, MainFragment2())
         addToBackStack("MainFragment2")
     }
 }

步骤2

必须在FragmentonCreate方法中设置动画

Fragment.setEnterTransition()
Fragment.setExitTransition()

Fragment.setSharedElementEnterTransition()
Fragment.setSharedElementReturnTransition()

封装后:

class MainFragment2 : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        FHelper().apply {
            fragment = this@MainFragment2
            defaultTransition()
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val inflate = inflater.inflate(R.layout.activity_main2, container, false)

        FHelper().apply {
            transitionView(inflate.findViewById(R.id.image_view), "image_view")
            transitionView(inflate.findViewById(R.id.text_view), "text_view")
            doIt()
        }

        return inflate
    }
}

砖厂地址: https://github.com/angcyo/TransitionDemo


群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.

联系作者

点此快速加群

请使用QQ扫码加群, 小伙伴们都在等着你哦!

关注我的公众号, 每天都能一起玩耍哦!

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页