使用動(dòng)畫(huà)實(shí)現(xiàn)微信讀書(shū)的換一批效果(兩種方式)
先來(lái)看看微信讀書(shū)的效果
實(shí)現(xiàn)思路
這個(gè)效果比較簡(jiǎn)單,主要是旋轉(zhuǎn)view,然后在旋轉(zhuǎn)結(jié)束后更換view的背景,考慮到需要旋轉(zhuǎn)view,所以使用動(dòng)畫(huà)來(lái)實(shí)現(xiàn)
兩種實(shí)現(xiàn)方式1.方式一 使用ObjectAnimator結(jié)合AnimatorSet
核心過(guò)程如下:
- 創(chuàng)建布局,一個(gè)容器,四個(gè)view,過(guò)程簡(jiǎn)單,這里不做介紹
- 創(chuàng)建兩個(gè)list,一個(gè)用來(lái)存放動(dòng)畫(huà),一個(gè)用來(lái)存放view
- 使用ObjectAnimator創(chuàng)建四個(gè)動(dòng)畫(huà),然后將動(dòng)畫(huà)放到list中
- 設(shè)置動(dòng)畫(huà)監(jiān)聽(tīng),動(dòng)畫(huà)結(jié)束時(shí)更換view背景
核心代碼如下:
public void startAnimation01(){ animators.clear(); //創(chuàng)建四個(gè)動(dòng)畫(huà),每個(gè)動(dòng)畫(huà)逆時(shí)針旋轉(zhuǎn)180度 Animator animator01 = ObjectAnimator.ofFloat(imageView01,"RotationY",0,-180); Animator animator02 = ObjectAnimator.ofFloat(imageView02,"RotationY",0,-180); Animator animator03 = ObjectAnimator.ofFloat(imageView03,"RotationY",0,-180); Animator animator04 = ObjectAnimator.ofFloat(imageView04,"RotationY",0,-180); animators.add(animator01); animators.add(animator02); animators.add(animator03); animators.add(animator04); //循環(huán)中統(tǒng)一處理事件監(jiān)聽(tīng),動(dòng)畫(huà)結(jié)束時(shí)更換每個(gè)view的背景 for(int i=0;i<animators.size();i++){ final int finalI = i; animators.get(i).addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { //更換背景 imageViews.get(finalI).setBackgroundColor(Color.parseColor("#FFAEB9")); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); } AnimatorSet set = new AnimatorSet(); //集合中的動(dòng)畫(huà)會(huì)順序執(zhí)行 set.playSequentially(animators); set.setStartDelay(200); set.setDuration(300); set.start(); }
2. 方式二 使用ViewPropertyAnimator
上面的方法使用的ObjectAnimator來(lái)實(shí)現(xiàn),ObjectAnimator的缺點(diǎn)就是實(shí)現(xiàn)起來(lái)代碼量比較大,重復(fù)的東西比較多。ViewPropertyAnimator可以以少量代碼實(shí)現(xiàn)效果,簡(jiǎn)介明了。
核心代碼如下:
public void startAnimation02(){ for (int i=0;i<animators01.size();i++){ final int finalI = i; animators01.get(i).setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { imageViews.get(finalI).setBackgroundColor(Color.parseColor("#FFAEB9")); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); } }
一開(kāi)始使用的rotationY,但是rotationY從效果上看只能執(zhí)行一次(其實(shí)是每次都會(huì)執(zhí)行,只是沒(méi)有變化而已),而rotationYBy則可以重復(fù)多次執(zhí)行。其他屬性也是同樣的效果。
效果展示
總結(jié)
到此這篇關(guān)于使用動(dòng)畫(huà)實(shí)現(xiàn)微信讀書(shū)的換一批效果的文章就介紹到這了,更多相關(guān)微信讀書(shū)換一批內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vs2022使用git同步報(bào)錯(cuò)以及解決每次推送要輸入密碼問(wèn)題
本文主要介紹了vs2022使用git同步報(bào)錯(cuò)以及解決每次推送要輸入密碼問(wèn)題,文中通過(guò)圖文示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10解決Fiddler在win7系統(tǒng)下的安全證書(shū)問(wèn)題
今天小編就為大家分享一篇關(guān)于解決Fiddler在win7系統(tǒng)下的安全證書(shū)問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10IDEA中使用Git拉取代碼時(shí)報(bào) Git pull failed原因及解決方法
這篇文章主要介紹了IDEA中使用Git拉取代碼時(shí)報(bào) Git pull failed原因及解決方法,本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08VScode敲代碼時(shí)自動(dòng)導(dǎo)入包的解決方案
這篇文章主要介紹了VScode敲代碼時(shí)自動(dòng)導(dǎo)入包的解決方案,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vscode具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09老生常談?dòng)?jì)算機(jī)中的編碼問(wèn)題(必看篇)
下面小編就為大家?guī)?lái)一篇老生常談?dòng)?jì)算機(jī)中的編碼問(wèn)題(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07調(diào)試JavaScript/VBScript腳本程序(IE篇)
JavaScript/VB Script腳本程序一般有兩種執(zhí)行方式,一種是嵌入在宿主程序里面執(zhí)行,比如在IE瀏覽器里面執(zhí)行;另外一種,在資源管理器里面雙擊執(zhí)行(雖然還是通過(guò)另外一個(gè)程序解釋執(zhí)行,但是給人的感覺(jué)畢竟是直接運(yùn)行)。2009-09-09