????????最近使用網(wǎng)易云簽到時發(fā)現(xiàn)它的樂簽動畫效果很不錯,正好抱著回顧下屬性動畫跟自定義View的心態(tài)來自己實現(xiàn)下這個效果, 其實自己剛開始寫動畫前也會擔(dān)心寫出來,但是只要沉下心去做,其實也沒有特別的難,本人水平有限,如果有錯誤還請小伙伴們指出,? 話不多說看下效果~

圖1-1 仿網(wǎng)易云樂簽動畫
????????動畫效果就是上邊圖片這樣,是不是還蠻有意思的??,關(guān)于動畫的思路我做了個思維導(dǎo)圖,這只是我自己的思路,小伙伴們有更好的思路咱們可以互相討論哦

圖1-2 動畫實現(xiàn)思路
????????動畫的實現(xiàn)大體分為三個思路,首先從卡片滑動效果入手,仔細(xì)觀察分析動畫發(fā)現(xiàn),圖片左右滑動的同時發(fā)生了一定角度的旋轉(zhuǎn),然后就想到了用屬性動畫的平移動畫與旋轉(zhuǎn)動畫,當(dāng)然實現(xiàn)動畫之前先要解決滑動問題,于是回到了大家熟悉的自定義ViewGroup,代碼如下

圖1-3

圖1-4

圖1-4

圖1-5
????????自定義ViewGroup的常規(guī)步驟,就不詳說了,然后就開始View的創(chuàng)建與確定位置,首先創(chuàng)建View,然后在onLayout()中確定它們ViewGroup中的位置

圖1-6 創(chuàng)建View

圖1-7 確定子View的位置
????????關(guān)于View位置的確定我簡單的畫了個草圖,畫圖技術(shù)很菜,請小伙伴們多多諒解

圖1-8 View各個位置的確定
????????left、right的位置好確定,主要是在top這個位置,因為要實現(xiàn)這種疊加的感覺,后邊的top要大于前邊的top就能實現(xiàn)這種效果,我的想法是這樣的,有更好想法的小伙伴們我們可以一起討論哦,所以top=View的高度/2,但是效果沒那么好,然后又微調(diào)了下,具體請看上圖代碼
? ? ? ? 準(zhǔn)備工作已完成,下邊就是重頭戲了,View的滑動,需要進(jìn)行平移與旋轉(zhuǎn),所以我們需要在 MotionEvent.ACTION_MOVE 時進(jìn)行操作,代碼如下

圖1-9 view滑動
????????主要使用setTranslationX()方法與setRotation()方法進(jìn)行平移和旋轉(zhuǎn),主要的動畫是在 MotionEvent.ACTION_UP時操作,代碼如下

圖1-10 手指抬起時滑動動畫
????????兩種情況—超過滑動閾值&&未超過滑動閾值時
????????超過滑動閾值時,直接滑出屏幕
????????未超過滑動閾值時,回彈動畫并復(fù)位
????????關(guān)于如何判斷左滑還是右滑,請看圖1-9中代碼,大體思路就是記錄MotionEvent.ACTION_DOWN時的X坐標(biāo)mInitx,然后滑動時根據(jù)移動的坐標(biāo)與mInitX做比較,從而判斷是左滑還是右滑
? ? ? ? 如此一來,圖1-2 思維導(dǎo)圖中的第一步就完成了
? ? ? ? 我感覺接下來是整個動畫效果的靈魂了,類似抽屜效果,卡片向前推進(jìn)效果(因為我也不知道怎么給他起名字,暫時就叫這個吧??,小伙伴們能明白就行)
? ? ? ? ? 仔細(xì)觀察動畫不難發(fā)現(xiàn)這個動畫的核心就是放大,當(dāng)?shù)谝粋€View滑動出屏幕后,第二個View會放大至第一View的大小,并移動到第一個View的所在的位置,大體思路有了,下邊就開始動手吧
? ??

圖1-11 卡片向前推動效果
? ? ? ? 因為代碼有點(diǎn)長截不全,具體代碼請大家移步到Gitee查看,代碼寫的比較亂,但是因為時間關(guān)系,就暫且先這樣了,還望各位小伙伴見諒,主要使用ObjectAnimator來完成需要實現(xiàn)的動畫效果,關(guān)于ObjectAnimator不了解的大家可以自行百度
? ? ? ? 主要展示的是三個View,所以其他View可以隱藏掉,所以就從position-1、position-2、position-3 入手,至于為什么是減而不是加,是因為View是從List集合的后邊往前展示的,即List集合中的最后一個為屏幕上第一個展示的View,每個View執(zhí)行相應(yīng)的放大,旋轉(zhuǎn),透明動畫,其實并不復(fù)雜,就是具體數(shù)值上麻煩一點(diǎn),這樣第二步就完成了
? ? ? ? 最后一步則是需要展示文字,然后我個人的想法就是自己去自定義可以帶文字的ImageView,TextImageView
? ? 繪制比較重要的就是文字換行

圖1-12 繪制換行文字