@@ -7,6 +7,9 @@ package com.osfans.trime.ime.window
7
7
import android.content.Context
8
8
import android.view.View
9
9
import android.widget.FrameLayout
10
+ import androidx.transition.Transition
11
+ import androidx.transition.TransitionManager
12
+ import androidx.transition.TransitionSet
10
13
import com.osfans.trime.ime.broadcast.InputBroadcaster
11
14
import com.osfans.trime.ime.dependency.InputScope
12
15
import me.tatarka.inject.annotations.Inject
@@ -27,6 +30,24 @@ class BoardWindowManager(
27
30
private var currentWindow: BoardWindow ? = null
28
31
private var currentView: View ? = null
29
32
33
+ private fun prepareAnimation (
34
+ exitAnimation : Transition ? ,
35
+ enterAnimation : Transition ? ,
36
+ remove : View ,
37
+ add : View ,
38
+ ) {
39
+ enterAnimation?.addTarget(add)
40
+ exitAnimation?.addTarget(remove)
41
+ TransitionManager .beginDelayedTransition(
42
+ view,
43
+ TransitionSet ().apply {
44
+ enterAnimation?.let { addTransition(it) }
45
+ exitAnimation?.let { addTransition(it) }
46
+ duration = 300
47
+ },
48
+ )
49
+ }
50
+
30
51
@Suppress(" BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER" )
31
52
fun <W : BoardWindow , E : ResidentWindow , R > cacheResidentWindow (
32
53
window : R ,
@@ -64,6 +85,12 @@ class BoardWindowManager(
64
85
if (currentWindow != null ) {
65
86
val oldWindow = currentWindow!!
66
87
val oldView = currentView!!
88
+ prepareAnimation(
89
+ oldWindow.exitAnimation(window),
90
+ window.enterAnimation(oldWindow),
91
+ oldView,
92
+ newView,
93
+ )
67
94
oldWindow.onDetached()
68
95
view.removeView(oldView)
69
96
broadcaster.onWindowDetached(oldWindow)
0 commit comments