RecyclerView通過Matrix實(shí)現(xiàn)視差動(dòng)畫

這次來實(shí)現(xiàn)RecyclerView視差動(dòng)畫掐禁,先來看下效果:

a.gif

那要怎么實(shí)現(xiàn)呢怜械?我這里是通過ImageView設(shè)置Matrix實(shí)現(xiàn),有更好的辦法歡迎留言告知傅事。
那么Matrix是什么呢缕允?我這里就簡單的說一下,如果想詳細(xì)了解的話蹭越,請(qǐng)自行搜索查看障本。

Paste_Image.png

matrix是一個(gè)3*3的矩陣,MSCALE_X响鹃、MSCALE_Y是來控制綻放的驾霜,MSKEW_X,MSKEY_Y是來控制錯(cuò)切的,MTRANS_X茴迁、MTRANS_Y是來控制位移的寄悯,MPERSP_0MPERSP_1堕义、MPERSP_2是來控制透視的,MSCALE_XMSCALE_Y倦卖、MSKEW_X洒擦、MSKEW_Y是用來控制旋轉(zhuǎn)的。

那我們要怎么對(duì)矩陣操作怕膛,可能大家都把線性代數(shù)還回給老師了熟嫩,就算沒還,算起來也麻煩褐捻,所以谷歌給我們提供了方便的方法掸茅,分別是preRotate()setRotate()柠逞、postRotate昧狮,代表的是左乘、設(shè)置和后乘板壮。這之間的差別我就不詳細(xì)介紹了逗鸣。視差效果主要用到了位移和縮放。

那這個(gè)效果的思路是怎樣绰精?我們對(duì)效果進(jìn)行拆分撒璧,其實(shí)發(fā)現(xiàn)每個(gè)圖片的效果都是一樣的,滾動(dòng)后圖片也跟著移動(dòng)笨使,圖片從RecyclerView頂部到達(dá)RecyclerView底部剛好遍歷一整張圖片卿樱,頂部時(shí),圖片也顯示頂部硫椰。到達(dá)底部時(shí)殿如,圖片也顯示底部,如圖所示最爬。

圖片在最頂部的效果
圖片在最底部的效果

那我們可以先對(duì)這個(gè)效果進(jìn)行分解涉馁,在沒有RecyclerView的時(shí)候,對(duì)ImageView進(jìn)行圖片的縮放和移動(dòng)爱致。

首先為ImageView設(shè)置圖片烤送,然后設(shè)置ScapeTypeMatrix,然后根據(jù)圖片比例進(jìn)行計(jì)算糠悯,縮放使圖片占滿ImageView帮坚,因?yàn)槲覀兊膱D片是要上下移動(dòng),所在我們在放大的時(shí)候要在CenterCrop的基礎(chǔ)上保證上下有一部分剩余互艾,這樣才可以移動(dòng)试和。并且圖片一開始位于ImageView的頂部。代碼如圖所示:

Paste_Image.png

這里做的事件也很簡單纫普,獲取drawable的原始寬高和ImageView的原始寬高阅悍,通過postScale()進(jìn)行比較縮放,讓圖片占滿整個(gè)ImageView這里ImageView的高度乘以1.1主要用于控制縮放后的圖片高度超過ImageView高度的1.1倍节视。當(dāng)置于recyclerview移動(dòng)時(shí)拳锚,讓任何規(guī)格的圖片都可以上下移動(dòng),產(chǎn)生較明顯的視差效果寻行。不然的話當(dāng)圖片控件寬高比相同(小于大于和控件圖片比例有關(guān))之類的情況下霍掺,會(huì)讓圖片上下無法移動(dòng)。

那我們怎樣對(duì)內(nèi)部的圖片進(jìn)行移動(dòng)拌蜘?可以通過postTranslationY()方法對(duì)圖片進(jìn)行上下移動(dòng)杆烁。看简卧,是不是很簡單兔魂。

向上移動(dòng)
a.gif

通過以上的步驟我們已經(jīng)可以控制圖片縮放到正確比例并上下移動(dòng),但是我們可以發(fā)現(xiàn)存在一個(gè)問題贞滨,圖片會(huì)被移出ImageView外面入热。我們可以進(jìn)行糾正,當(dāng)圖片被移動(dòng)到ImageView邊框外后晓铆,把圖片糾正回ImageView內(nèi)部勺良。代碼如下:

Paste_Image.png

這里主要通過mapRect()方法獲得通過變換后的圖片邊框位置,然后判斷是否超出ImageView的上下邊框骄噪,進(jìn)行糾正尚困,這樣就可能防止圖片移出ImageView的邊框。

a.gif

現(xiàn)在我們已經(jīng)知道怎么圖片怎么通過Matrix進(jìn)行移動(dòng)链蕊。那實(shí)現(xiàn)RecyclerView的視差動(dòng)畫肯定也難不倒聰明的你事甜,只需要為RecyclerView添加addOnScrollListener()監(jiān)聽,當(dāng)RecyclerView滾動(dòng)時(shí)滔韵,根據(jù)每個(gè)Item距離RecyclerView頂部的距離移動(dòng)對(duì)應(yīng)的比例逻谦。這樣,我們就實(shí)現(xiàn)了我們的視差效果陪蜻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邦马,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宴卖,更是在濱河造成了極大的恐慌滋将,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件症昏,死亡現(xiàn)場離奇詭異随闽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肝谭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門掘宪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛾扇,“玉大人,你說我怎么就攤上這事添诉∑ㄉ#” “怎么了医寿?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵栏赴,是天一觀的道長。 經(jīng)常有香客問我靖秩,道長须眷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任沟突,我火速辦了婚禮花颗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惠拭。我一直安慰自己扩劝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布职辅。 她就那樣靜靜地躺著棒呛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪域携。 梳的紋絲不亂的頭發(fā)上簇秒,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音秀鞭,去河邊找鬼趋观。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锋边,可吹牛的內(nèi)容都是我干的皱坛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼豆巨,長吁一口氣:“原來是場噩夢啊……” “哼剩辟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搀矫,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤抹沪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瓤球,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體融欧,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年卦羡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了噪馏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麦到。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖欠肾,靈堂內(nèi)的尸體忽然破棺而出瓶颠,到底是詐尸還是另有隱情,我是刑警寧澤刺桃,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布粹淋,位于F島的核電站,受9級(jí)特大地震影響瑟慈,放射性物質(zhì)發(fā)生泄漏桃移。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一葛碧、第九天 我趴在偏房一處隱蔽的房頂上張望借杰。 院中可真熱鬧,春花似錦进泼、人聲如沸蔗衡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绞惦。三九已至,卻和暖如春刷袍,著一層夾襖步出監(jiān)牢的瞬間翩隧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工呻纹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堆生,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓雷酪,卻偏偏與公主長得像淑仆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哥力,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容