項目重構的Git地址:
https://github.com/razerdp/FriendCircle
項目同步更新的文集:
http://www.reibang.com/notebooks/3224048/latest
本文控件Git地址:
https://github.com/razerdp/PhotoContents
上集:歡樂的票圈重構——九宮格控件(中下)
下集:歡樂的票圈重構——圖片過渡動畫(上)
在上篇,我們把九宮格控件的核心(obtainView())等方法寫了豁鲤,那么本篇將會是對最后的一個事件傳遞進行收尾半夷,然后我們的朋友圈項目將會進行到下一步饺鹃。
Touch事件
說到Touch棕硫,就永遠都無法避開三個最基本的時間:
Down扮叨、Move、Up
事實上瞳遍,對于本控件压彭,也還真只是對這三個地方進行邏輯操作睦优。
對于我們的九宮格的touch事件,如果要概括的話壮不,其實就是兩個動作:
down——up
所以我們的touch事件不會很難也不會有一大堆東西要解決汗盘,從根本上來說解決的只有兩個:
- 點下的時候傳遞到child,通知child它被點下了(
setPress(true)
) - 抬起時“觸發(fā)click事件”(因為我們并沒有用clickListener询一,所以用雙引號括一下)隐孽,并且通知child已經(jīng)抬起(setPress(false))
因此癌椿,我們的touch大體上可以寫成如下的幾個方法:
Down事件
在down觸發(fā)的時候,我們做的只有兩個:
- 找到被點擊的view
- 更新它的press狀態(tài)
其中pointToPosition()
方法在上一篇文章已經(jīng)講過了菱阵,所以這里不再重復
UP事件
在up事件里面踢俄,我們除了更新press狀態(tài)外,還得模擬點擊的操作晴及。
而模擬點擊的操作其實是通過一個handler來實現(xiàn)的都办,如果沒記錯的話,系統(tǒng)也是通過handler實現(xiàn)的(包括longClick)
如圖所示虑稼,點擊事件我們是通過performItemClick
琳钉,把找到的對應的View傳遞出去,然后蛛倦,我們判斷當前的runnable是否有在執(zhí)行歌懒,如果執(zhí)行則把它從handler的消息隊列移除,然后重新創(chuàng)建一個runnable并post到handler的消息隊列里面延遲執(zhí)行胰蝠。在這里我們僅僅是更新狀態(tài)而已(事實上歼培,performItemClick放在runnable里面執(zhí)行才是最正確的選擇震蒋,這里我把它放在外面了茸塞,這以后可能會是一個坑)
收尾就這樣。
最后有幾句話想說
今天瀏覽文章的時候查剖,無意中發(fā)現(xiàn)一個很熟悉的圖片(文章末尾有個“猜你喜歡”钾虐,然后推薦里有文章的預覽圖),點進去后發(fā)現(xiàn)正是我的項目笋庄,網(wǎng)站是安卓巴士效扫。
該帖發(fā)布已經(jīng)一年了,是的直砂,一年后我才發(fā)現(xiàn)菌仁,而且如果沒有“猜你喜歡”也許我還真不知道。
文章被直接抄過去我沒什么說的静暂,從另一個方面來說也算是幫我傳播了一下人氣(雖然他連原文和github地址都沒打上)济丘。
但這個代碼收費是什么意思?
這是一個開源項目洽蛀!開源的D∶浴!開源的=脊O康铩!
不僅開源驮审,我還把所有的思路和問題解決方案都會寫文章發(fā)布在簡書鲫寄。
用開源項目明目張膽的收費吉执,真的太惡心了好咩。你說你自己改了一下然后收費也好啊地来,然而全部一樣來收費我這個原作者都看不下去了鼠证。。靠抑。量九。
所以如果有安卓巴士帳號或者其他地方看到類似要求積分或者付費下載的觀眾大老爺們,請狠狠的回復我們朋友圈項目的github地址颂碧,告訴樓主:
這TM的是開源的荠列,你收費還讓我下載一個N年前的代碼?人家git上都更新了好幾代了好么T爻恰<∷啤!
下一篇诉瓦,將會是ImageView的轉(zhuǎn)場動畫的實現(xiàn)思路川队。
更新時間:未知。