1. 程式人生 > 其它 >Android開發——遊戲約玩app原始碼中轉場動畫的實現

Android開發——遊戲約玩app原始碼中轉場動畫的實現

一、簡介
1.在遊戲約玩app原始碼中,兩個activity之間切換時介面的過渡效果。
2.兩個activity或者Fragment之間shared elements切換效果。
3.遊戲約玩app原始碼中轉場動畫的兩種常用方式:

  • overridePendingTransition
  • ActivityOptions

二、overPaddingTransition動畫
1.假如在遊戲約玩app原始碼中有A和B兩個頁面進行切換,A:從螢幕中間往左邊移,直至消失。B:從右邊出現,移動到螢幕中間,直至與螢幕重合。
2.新建一個anim包,在裡面建立幾個資原始檔。

  • left_exit.xml:從左邊消失的動畫,移動距離為一個螢幕的寬度。所以為-100%p(相當於A頁面的動畫,從螢幕中消失)
<translate xmlns:android="http://schemas.android.com/apk/res/android"
     android:fromXDelta="0"
     android:toXDelta="-100%p"
     android:duration = "500"
    >
</translate>
  • left_enter.xml:從右邊進入的動畫。(相當於B頁面的動畫,從右側進入螢幕)
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="100%p"
    android:toXDelta="0"
    android:duration = "500"
    >
</translate>

3.在遊戲約玩app原始碼中任意搭建兩個介面,新增兩個按鈕,然後修改一下背景顏色即可。先實現第一個next按鈕的點選事件。

next.setOnClickListener {
     startActivity(Intent(this,DetailActivity::class.java))
     overridePendingTransition(R.anim.left_enter_anim,R.anim.left_exit_anim)
}

4.跳轉過去之後,如果又要跳回去,那麼在另外一個Activity裡面實現一下back按鈕的點選事件即可

back.setOnClickListener{
            finish()
        }
  • 如果只調用finish()函式的話,那麼它只會在遊戲約玩app原始碼中沒有任何動畫效果地跳轉回去,一點都不美觀。

5.如果想讓它也有一點動畫效果,那麼再新增兩個資原始檔即可。這一次是從右邊推過去。

  • right_enter.xml:從最左邊進入螢幕中間。
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="-100%p"
    android:toXDelta="0"
    android:duration = "500">
</translate>
  • right_exit.xml:從螢幕中間移動到最右邊。
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:toXDelta="100%"
    android:duration = "500">
</translate>

6.在back按鈕的監聽事件中新增這個動畫效果

overridePendingTransition(R.anim.right_enter_anim,R.anim.right_exit_anim)

7.左右都可以,那麼上下切換也可以。我們新增兩個從底部出現和消失的資原始檔

  • bottom_enter.xml:從底部進入螢幕,這一回只用修改y座標。
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="100%p"
    android:toYDelta="0"
    android:duration = "500">
</translate>
  • top_exit.xml:從螢幕中向上移動,直至消失。
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="0"
    android:toYDelta="-100%p"
    android:duration = "500">
</translate>

8.在MainActivity裡面設定一下就可以使用,從另外一個頁面切換回來的動畫又要重新設定一下。

overridePendingTransition(R.anim.botton_enter_anim,R.anim.top_exit_anim)

9.在遊戲約玩app原始碼中除了推動,還可以設定透明度動畫。

  • alpha_enter.xml:進入的動畫。
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0"
    android:toAlpha="1"
    android:duration = "500">
</alpha>
  • alpha_exit.xml:消失的動畫。
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1"
    android:toAlpha="0"
    android:duration = "500">
</alpha>
overridePendingTransition(R.anim.alpha_enter_anim,R.anim.alpha_exit_anim)

同理,縮放,旋轉那些動畫都是可以自己做的。

三、共享元素切換
1.遊戲約玩app原始碼介面切換時 需要有共享元素切換效果。比如A和B頁面都有兩張圖片,那麼我們想讓A頁面的圖片和B頁面的圖片作為共享元素,讓它們的轉換更平滑一點。
1.在遊戲約玩app原始碼的介面A和B中 為共享控制元件設定相同的transitionName

android:transitionName="picture2"

2.建立ActivityOptions物件

val options = ActivityOptions.makeSceneTransitionAnimation(this,imageView,"picture2")

3.啟動介面

startActivity(Intent(this,DetailActivity::class.java),options.toBundle())

四、多個共享動畫
1.在遊戲約玩app原始碼中有共享元素時,切回去的方法就可以使用以下函式,這樣切回去也會有一定的動畫效果。

finishAfterTransition()

2.如果有多個共享元素,那麼給其他元素也設定相同的transitionName,使用Pair將它們聯絡在一起

                val options=
                ActivityOptions.makeSceneTransitionAnimation(
                    this,
                    Pair<View,String>(imageView,"picture1"),
                    Pair<View,String>(imageView2,"picture2")
                    )

3.還有很多其他的動畫,比如以下:

val options = ActivityOptions.makeScaleUpAnimation(
            imageView,0,0,imageView.width,imageView.height

4.還有其他方法來處理共享動畫

         window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
        window.exitTransition = Slide(Gravity.END).setDuration(1000)
        window.enterTransition= Slide(Gravity.END).setDuration(1000)

以上就是“Android開發——遊戲約玩app原始碼中轉場動畫的實現”的全部內容了,希望對大家有幫助。

本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理

原文連結:https://www.jianshu.com/p/bafec95e8573