iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
2
Software Development

Android animation 30天上手系列 第 18

Day18 Reveal Effect

  • 分享至 

  • xImage
  •  

Reveal Effect

在App要顯示或隱藏 UI時,直接切換顯示的內容,可能會讓使用者覺得畫面突然變化太大。Reveal animation 動畫可提供使用者視覺上的連續性,減緩變化並引起使用者的注意。

demo

步驟:
1.點下Fab時,取得Fab的x,y座標,開啟第二頁。
2.第二頁從第一頁傳來的Fab座標開啟Reveal 動畫

第一頁

fab.setOnClickListener { v ->
    val location = IntArray(2)

    //取得fab的x, y座標
    v.getLocationOnScreen(location)
    val revealX = location[0]
    val revealY = location[1]

    val options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, v, "Transition")

    //傳入fab的x, y座標
    val intent = Intent(this, RevealEffectActivity::class.java)
    intent.putExtra(RevealEffectActivity.ARG_CIRCULAR_REVEAL_X, revealX)
    intent.putExtra(RevealEffectActivity.ARG_CIRCULAR_REVEAL_Y, revealY)

    ActivityCompat.startActivity(this, intent, options.toBundle())
}

第二頁
從第一頁傳來的Fab座標開啟Reveal 動畫

private fun startReveal(centerX: Int, centerY: Int) {
    //動畫的開始半徑
    val startRadius = 0.0f
    //動畫的結束半徑
    val endRadius = Math.max(rootLayout.width, rootLayout.height).toFloat()

    val circularReveal = ViewAnimationUtils.createCircularReveal(rootLayout, centerX, centerY, startRadius, endRadius)
    circularReveal.duration = 400
    circularReveal.interpolator = AccelerateInterpolator()

    rootLayout.visibility = View.VISIBLE
    circularReveal.start()
}

ViewAnimationUtils.createCircularReveal參數

view View: 執行Reveal 動畫的View
centerX int: 相對於View,動畫圓心的x坐標
centerY int: 相對於View,動畫圓心的y坐標
startRadius float: 動畫的開始半徑
endRadius float: 動畫的結束半徑

完整程式:
https://github.com/evanchen76/RevealEffect

參考:
https://developer.android.com/training/animation/reveal-or-hide-view


上一篇
Day17 CoordinatorLayout
下一篇
Day19 Ripple Effect
系列文
Android animation 30天上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言