今天我們想要來試試看 Android 所提供原生的轉場動畫。
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
explodeBtn.setOnClickListener { startTransitionWithFlag("explode") }
slideBtn.setOnClickListener { startTransitionWithFlag("slide") }
fadeBtn.setOnClickListener { startTransitionWithFlag("fade") }
}
我們來看一下,我們用三個 button 來顯示 Activtiy 之間的轉換效果。
三個不同的 Button 會透過給予不同的 flag 來達成不同的轉場效果。
MainActivity.kt
private fun startTransitionWithFlag(flag:String) {
val intent = Intent(this, Main2Activity::class.java)
intent.putExtra("flag", flag)
startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this).toBundle())
}
這裡我們可以看到我們就像一般時候使用 intent 一樣轉換到另一個 activity 。
但我們把我們需要轉場動畫的訊息(ActivityOptionsCompat.makeSceneTransitionAnimation)一起帶過去另一個 Activity
同時我們也把 flag 變數一起帶過去,另一個 Activity ,方便我們做判斷。
接下來只要到我們另一個 Activity 去告訴 Android 我們需要轉場動畫唷。
class Main2Activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
setupTrainsition()
}
private fun setupTrainsition() {
when(intent.getStringExtra("flag")){
"explode" -> {
val explodeTransition = Explode()
explodeTransition.duration = 1000
window.enterTransition = explodeTransition
window.exitTransition = explodeTransition
}
"slide" -> {
val slideTransition = Slide()
slideTransition.duration = 1000
window.enterTransition = slideTransition
window.exitTransition = slideTransition
}
"fade" -> {
val fadeTransition = Fade()
fadeTransition.duration = 1000
window.enterTransition = fadeTransition
window.exitTransition = fadeTransition
}
}
}
}
我們可以看到我們利用 window.enterTransition 來設定進入或離開 Activity 時需要什麼動畫。
也可以設定 duration 所需要的時間。
是不是很簡單啊~~
今天就先到這裡囉,我們明天見~~~