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掃碼加羣, 小夥伴們都在等着你哦!

關注我的公衆號, 每天都能一起玩耍哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章