Android sample code, kotlin

Sample code : Android Activity transition

Sample code : Android Activity transition

由一個 Activity 切換到另一個 Activity, 使用 startActivity(Intent) 來進行

1. 基本的語法

	val intent = Intent(this, SecondActivity::class.java).apply {
	    putExtra(AlarmClock.EXTRA_MESSAGE, "Hello, second.") // pass value to the activity
	}
	startActivity(intent)

這裡可以透過 putExtra 來傳遞資料到另一個 Activity

而另一個 Activity 則可以在 onCreate 裡這麼收:

    val msg = intent.getStringExtra(AlarmClock.EXTRA_MESSAGE) ?: "No message"

後面的 ?: 是指如果沒收到資料時的預設值,是 kotlin 的語法。雖然依 kotlin 語法來說不需要這個,因為 msg 沒加?所以 getStringExtra 必需要給一個非 null 值,不過我對 Android 裡把 Java 跟 Kotlin 混用的情形下,並不是很信任… 還是加一下 ?: 比較安心。

2. 過場動畫

如果切換時要有滑入的動畫,可以這麼作:

    startActivity(
        Intent(
            this,
            SecondActivity::class.java
        )
    )
    overridePendingTransition(
        // 指定轉換的動畫
        R.anim.slide_in_right,   // 新 Activity 進入動畫
        R.anim.slide_out_left	 // 原 Activity 離開的動畫
    )

這裡的 overridePendingTransition 是個奇妙的函式:

	public void overridePendingTransition (int enterAnim, 
                int exitAnim)

他會判斷此時是那個 activity 要離開,那個 activity 要進來,而將 enterAnimation 跟 exitAnimation 分配下去,而且它必需在 startActivity() startActivityForResult() 以及 finish() 等使用,而且必需要在之後立刻呼叫

而其中的 R.anim.slide_in_right 是資源檔,內容為:

Slide right animation resource file

而回來的時候也可以這麼作:

    finish()
    overridePendingTransition(
        // 指定轉換的動畫
        R.anim.slide_in_left,   // 新 Activity 進入動畫
        R.anim.slide_out_right	 // 原 Activity 離開的動畫
    )

3. 切換為新的 Root Activity

要切換為新的 Root Activity,並且清除全部在背景的 Activity 時,可以這麼作:

    val intent = Intent(this, SecondActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    startActivity(intent)
    finish()
    overridePendingTransition(
        // 指定轉換的動畫
        R.anim.slide_in_right,	 // 新 Activity 進入動畫
        R.anim.slide_out_left   // 原 Activity 離開的動畫
    )

但是這時如果還要回來的時候,就不能只呼叫 finish(),因為只剩最後一個 Activity 這樣會導致 APP 關閉,所以得要這麼作:

    val intent = Intent(this, MainActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    startActivity(intent)
    finish()
    overridePendingTransition(
        // 指定轉換的動畫
        R.anim.slide_in_left,   // 新 Activity 進入動畫
        R.anim.slide_out_right	 // 原 Activity 離開的動畫
    )

Sample project :

https://github.com/orangedream/AndroidSampleCode1

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.