Skip to content

Commit 663e9c4

Browse files
committed
feat(window): add default animation effect when enter or exit
1 parent 5a59425 commit 663e9c4

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

app/src/main/java/com/osfans/trime/ime/window/BoardWindow.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,26 @@
44

55
package com.osfans.trime.ime.window
66

7+
import android.view.Gravity
78
import android.view.View
9+
import androidx.transition.Fade
10+
import androidx.transition.Slide
11+
import androidx.transition.Transition
812

913
sealed class BoardWindow {
14+
/**
15+
* Animation when the window is added to the layout
16+
*/
17+
open fun enterAnimation(lastWindow: BoardWindow): Transition? =
18+
Slide().apply {
19+
slideEdge = Gravity.TOP
20+
}
21+
22+
/**
23+
* Animation when the window is removed from the layout
24+
*/
25+
open fun exitAnimation(nextWindow: BoardWindow): Transition? = Fade()
26+
1027
/**
1128
* After the window was set up in InputComponent
1229
*/

app/src/main/java/com/osfans/trime/ime/window/BoardWindowManager.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ package com.osfans.trime.ime.window
77
import android.content.Context
88
import android.view.View
99
import android.widget.FrameLayout
10+
import androidx.transition.Transition
11+
import androidx.transition.TransitionManager
12+
import androidx.transition.TransitionSet
1013
import com.osfans.trime.ime.broadcast.InputBroadcaster
1114
import com.osfans.trime.ime.dependency.InputScope
1215
import me.tatarka.inject.annotations.Inject
@@ -27,6 +30,24 @@ class BoardWindowManager(
2730
private var currentWindow: BoardWindow? = null
2831
private var currentView: View? = null
2932

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+
3051
@Suppress("BOUNDS_NOT_ALLOWED_IF_BOUNDED_BY_TYPE_PARAMETER")
3152
fun <W : BoardWindow, E : ResidentWindow, R> cacheResidentWindow(
3253
window: R,
@@ -64,6 +85,12 @@ class BoardWindowManager(
6485
if (currentWindow != null) {
6586
val oldWindow = currentWindow!!
6687
val oldView = currentView!!
88+
prepareAnimation(
89+
oldWindow.exitAnimation(window),
90+
window.enterAnimation(oldWindow),
91+
oldView,
92+
newView,
93+
)
6794
oldWindow.onDetached()
6895
view.removeView(oldView)
6996
broadcaster.onWindowDetached(oldWindow)

0 commit comments

Comments
 (0)