Android實現(xiàn)一個簡單帶動畫的展開收起功能
今天給大家?guī)硪粋€展開和收起的簡單效果。如果只是代碼中簡單設(shè)置顯示或隱藏,熟悉安卓系統(tǒng)的朋友都知道,那一定是閃現(xiàn)。所以筆者結(jié)合了動畫,使得體驗效果瞬間提升一個檔次。話不多說,直接上效果:
首先觀察圖中效果,視圖有展開和折疊兩種狀態(tài),右側(cè)圖標和文字會跟隨這個狀態(tài)改變。那么其中就有折疊的高度和展開的高度需要我們記錄。折疊高度是固定的,展開高度需要動態(tài)獲取。需要注意的是不能直接通過視圖直接獲取高度,因為視圖的繪制和Activity的生命周期是不同步的,這里直接用簡單的post方式獲取到繪制完成的總高度。
lin?.post { val h = lin!!.height hight = if (h > 0) h else baseHight if (h > 0 && ivTop?.visibility == View.GONE) { ivTop?.visibility = View.VISIBLE } }
接下來就是動畫的使用和動態(tài)控制視圖的高度了。這里需要用到屬性動畫,由于我們要控制的視圖不止一個,所以還是使用ValueAnimator方便點。通過addUpdateListener添加監(jiān)聽后,animation.animatedValue就是我們需要的當前值。在此處不停將當前高度賦值給視圖,并且圖標也根據(jù)這個值進行等比例的旋轉(zhuǎn)以到達到視圖不停更新。
//根據(jù)展開、關(guān)閉狀態(tài)傳入對應(yīng)高度 val animator = ValueAnimator.ofInt( if (isExpand) hight - baseHight else 0, if (isExpand) 0 else hight - baseHight ) animator.addUpdateListener { animation -> val params = lin?.layoutParams params?.height = if ((animation.animatedValue as Int) < baseHight) baseHight else (animation.animatedValue as Int) //當高度小于基礎(chǔ)高度時 給與基礎(chǔ)高度 lin?.layoutParams = params//拿到當前高度 //圖標旋轉(zhuǎn) ivTop?.rotation = (animation.animatedValue as Int) * 180f / (hight - baseHight) } animator.duration = 500 animator.start() isExpand = !isExpand tvExpand?.text = if (isExpand) "關(guān)閉" else "展開"
好了,一個簡單的展開收起功能就實現(xiàn)了,希望對大家有所幫助。
到此這篇關(guān)于Android實現(xiàn)一個簡單帶動畫的展開收起功能的文章就介紹到這了,更多相關(guān)Android展開收起功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android4.4開發(fā)之電池低電量告警提示原理與實現(xiàn)方法分析
這篇文章主要介紹了Android4.4開發(fā)之電池低電量告警提示原理與實現(xiàn)方法,結(jié)合實例形式分析了Android4.4電池電量警告的原理及相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Android 組合控件實現(xiàn)布局的復(fù)用的方法
本篇文章主要介紹了Android 組合控件實現(xiàn)布局的復(fù)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08Kotlin中實現(xiàn)多線程數(shù)據(jù)刷新的完整方案
這篇文章主要介紹了Kotlin中實現(xiàn)多線程數(shù)據(jù)刷新的完整方案,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-04-04Mac OS X 下有關(guān)Android adb用法詳解
這篇文章主要介紹了Mac OS X 下有關(guān)Android adb用法詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04