Android MIUI 即刻APP 返回手勢及動畫 探索

swipe_left.jpeg

swipe_right.jpeg

18 年底做 Readhub APP 時就加入了這個返回動畫效果坯汤。一直到現(xiàn)在福压,才有時間來簡單總結(jié)和封裝一下。

swipeback.gif

不知道這個返回手勢動畫到底是 MIUI 還是「即刻」APP 首創(chuàng),因為我那會兒還沒用上 MIUI 全面屏堵第。不過 MIUI 全面屏那個返回手勢相對簡單兆旬,固定位置假抄。從這個效果上看,我覺得是 MIUI 先有這個效果丽猬,然后 「即刻」APP 優(yōu)化豐富了一下宿饱。當(dāng)然,可能還有另外一種情況脚祟,這是早就有的效果圖谬以,只是在目前,我已知有使用的就上面兩個場景由桌。

總結(jié)起來很簡單为黎,就是一個「貝塞爾曲線」的繪制,再外加一個箭頭繪制行您。箭頭什么的的繪制在之前的倉庫中已經(jīng)練習(xí)過很多铭乾。這次著重說說這個特殊圖形需要怎么繪制。

對于貝塞爾曲線繪制娃循,之前玩過兩階炕檩、三階的。第一次看到這個效果捌斧,覺得貝塞爾曲能實現(xiàn)笛质,但是這是幾階的,高階的怎么玩捞蚂,那就是從頭開始妇押。

在經(jīng)過一番把玩探索后,最終確定這就是五階的貝塞爾曲線姓迅, Android 似乎默認(rèn)沒有高階對應(yīng)的 api 敲霍。

貝塞爾曲線.png

那這怎么辦呢?曲線就是函數(shù)嘛队贱,肯定有公式色冀,網(wǎng)上就搜到公式寫法。

private fun calculateY(i: Int, j: Int, t: Float): Float {
    return if (i == 1) {
        (1 - t) * controlPoints[j].y + t * controlPoints[j + 1].y
    } else (1 - t) * calculateY(i - 1, j, t) + t * calculateY(i - 1, j + 1, t)
}

controlPoints 對應(yīng)的就是那個五個控制點的集合柱嫌。

addControlPoint(0, 0f, yResult - maxPeakValue * 1.5f)
addControlPoint(1, 0f, yResult - maxPeakValue * 1.5f * GOLDEN_RATIO)
addControlPoint(2, min, yResult)
addControlPoint(3, 0f, yResult + maxPeakValue * 1.5f * GOLDEN_RATIO)
addControlPoint(4, 0f, yResult + maxPeakValue * 1.5f)

接著就是控制是否攔截事件锋恬,我現(xiàn)在是做成 Helper 這種工具類型,和對應(yīng)的 ViewGroup 是解耦的编丘,其實就是 ViewDragHelper 的一個簡單實現(xiàn)与学。

對了彤悔,最后考慮下來,實現(xiàn)了左右兩邊的滑動效果索守。至于上下晕窑,我覺得這種場景不大,就懶得去做了卵佛。

具體代碼細節(jié)就不貼了杨赤,源碼也沒多少,這里講遇到的一些細節(jié)問題或者寫出來的 bug

返回退出應(yīng)用后截汪,后臺程序預(yù)覽中存在返回手勢效果

這里其實就是一個先后問題疾牲,一開始是同步執(zhí)行 invalidate()onBackReleased() 。后來使用 Runnable + postDalay() 來延遲 onBackReleased() 執(zhí)行衙解。

貝塞爾曲線貼近屏幕的地方總有一個像素的白線

這里后面排查出來是我添加控制點阳柔,for 循環(huán)時角標(biāo)是[0,length-1],最后一個沒有添加計算到,所以計算出來的控制點就少了一個蚓峦。最終效果就是繪制出來的圖形 x 軸沒有完全對稱舌剂。偏差就在 1px 左右。
最后的效果就是總感覺下方有一跟白線暑椰。

for 循環(huán)處理好之后霍转,發(fā)現(xiàn)右邊繪制出來還是會有這個情況,具體原因不清楚一汽,因為單看數(shù)據(jù)層面谴忧,它肯定是貼邊的。最后很討巧角虫,使用到 translate()Canvas 平移一個像素規(guī)避掉,這簡直是程序員的小巧思委造,哈哈 ??戳鹅。

控制點數(shù)量及緩存

因為是用公式算的控制點,所以每一次繪制昏兆,其實簡單理解就是講一個一個點連接成一條曲線的枫虏。那么問題就是,點多爬虱,曲線當(dāng)然最逼真隶债,但是單位時間處理的數(shù)據(jù)量就上去了。
點少跑筝,可能你看到就是折線圖了死讹。
最后均衡在 50 個控制點,點與點之間的比例就是 2% 曲梗。在繪制等方法中肯定不能頻繁創(chuàng)建對象赞警,所以這 50 個點需要復(fù)用妓忍。

倉庫地址

lovejjfg/SwipeBack 現(xiàn)已同步 jcenter 太闺。 詳情請移步 README.md

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荣瑟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糠溜,更是在濱河造成了極大的恐慌笤虫,老刑警劉巖旁瘫,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琼蚯,居然都是意外死亡酬凳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門凌停,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粱年,“玉大人,你說我怎么就攤上這事罚拟√ㄊ” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵赐俗,是天一觀的道長拉队。 經(jīng)常有香客問我,道長阻逮,這世上最難降的妖魔是什么粱快? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮叔扼,結(jié)果婚禮上事哭,老公的妹妹穿的比我還像新娘。我一直安慰自己瓜富,他們只是感情好鳍咱,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著与柑,像睡著了一般谤辜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上价捧,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天丑念,我揣著相機與錄音,去河邊找鬼结蟋。 笑死脯倚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嵌屎。 我是一名探鬼主播挠将,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼胳岂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舔稀?” 一聲冷哼從身側(cè)響起乳丰,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎内贮,沒想到半個月后产园,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡夜郁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年什燕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竞端。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屎即,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出事富,到底是詐尸還是另有隱情技俐,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布统台,位于F島的核電站雕擂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贱勃。R本人自食惡果不足惜井赌,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贵扰。 院中可真熱鬧仇穗,春花似錦、人聲如沸戚绕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽列肢。三九已至,卻和暖如春宾茂,著一層夾襖步出監(jiān)牢的瞬間瓷马,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工跨晴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欧聘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓端盆,卻偏偏與公主長得像怀骤,于是被迫代替她去往敵國和親费封。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 案主相關(guān)信息:30蒋伦,未婚弓摘,女;作畫順序:樹痕届、太陽韧献、房子、人(畫人的時候想了很久研叫,最后發(fā)現(xiàn)手不知道要怎么畫) 需求是...
    bobo_ccd9閱讀 266評論 0 0
  • 好久不上了锤窑,冒個泡。
    杺栯欞樨閱讀 405評論 2 10
  • 又是一年秋風(fēng)吹嚷炉, 不讓百花昏昏欲睡渊啰。 遠遠的,我聞到丹桂的香味申屹。 真是绘证,遠遠的。 花壇旁独柑,寫生的同學(xué)迈窟, 手拿著鉛筆...
    phantomses閱讀 462評論 0 1
  • 在最美好的年級里好好打理自己的外貌以及肉體,不要胡吃海塞<烧ぁ车酣! 掌握好學(xué)習(xí)方法以及最終目的,然后好好的專注在那個領(lǐng)域...
    麋鹿Mona閱讀 149評論 0 0