Shawlaw的Android周記 2016年8月28日

1仅讽、Android逐幀動(dòng)畫(huà)的實(shí)現(xiàn)
逐幀動(dòng)畫(huà),顧名思義媳板,就是用一張張圖片作為一幀幀咳焚,然后連續(xù)播放作為動(dòng)畫(huà)。
這種動(dòng)畫(huà)的實(shí)現(xiàn)非常簡(jiǎn)單:準(zhǔn)備好每一幀的圖片放到drawable文件夾下吴攒,寫(xiě)一個(gè)animation-list的xml放到drawable文件夾(不是anim文件夾U懦!M菡)下署惯,就像這樣

frame_animation_demo.xml
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/第一幀" android:duration="200" />
    <item android:drawable="@drawable/第二幀" android:duration="200" />
    <item android:drawable="@drawable/第三幀" android:duration="200" />
    ...
    <item android:drawable="@drawable/第n幀" android:duration="200" />
</animation-list>

其中的oneshot參數(shù)是表明這個(gè)動(dòng)畫(huà)是否只執(zhí)行一遍,true為只執(zhí)行一遍镣隶,false為無(wú)限循環(huán)執(zhí)行直到手動(dòng)stop或手動(dòng)替換掉這個(gè)資源极谊。
然后就可以在布局的xml中把這個(gè)xml作為一個(gè)drawable設(shè)置到某個(gè)View的background那里。

demo_layout.xml
...
  android:background="@drawable/frame_animation_demo"
...

然后要啟動(dòng)和停止動(dòng)畫(huà)的話則直接在Java代碼中取到對(duì)應(yīng)的View安岂,然后再通過(guò)取得背景drawable轻猖,強(qiáng)轉(zhuǎn)為AnimationDrawable,然后調(diào)用對(duì)應(yīng)的start方法和stop方法即可域那。
需要注意的是咙边,stop被調(diào)用后,這個(gè)動(dòng)畫(huà)則是立即停止在當(dāng)前展示的幀次员,而不是停止在第n幀败许。
此外,不要在Activity的onCreate回調(diào)中調(diào)用AnimationDrawable的start方法淑蔚,因?yàn)閛nCreate時(shí)這個(gè)AnimationDrawable還沒(méi)有完整地attach上即將要展示的window市殷,如果希望Activity一出現(xiàn)時(shí)就開(kāi)始輪播動(dòng)畫(huà),請(qǐng)?jiān)贏ctivity的 onWindowFocusChanged()方法中調(diào)用AnimationDrawable的start方法刹衫。

2醋寝、HandlerThread的退出
在HandlerThread類中,提供了兩個(gè)退出方法绪妹,quit()quitSafely()甥桂。
區(qū)別在于quit()方法是直接把消息隊(duì)列里的消息全都回收,而quitSafely()則是只回收消息隊(duì)列里的在調(diào)用了quitSafely()之后的才產(chǎn)生的消息邮旷,確保在調(diào)用之前產(chǎn)生的消息都能投遞完成黄选。
所以在退出時(shí)最好對(duì)系統(tǒng)版本進(jìn)行判別然后優(yōu)先調(diào)用quitSafely()來(lái)停止使用的HandlerThread。

3婶肩、Gradle腳本中办陷,對(duì)于字符串的雙引號(hào)和單引號(hào)的區(qū)別。
在Gradle腳本中律歼,對(duì)字符串的賦值有兩種民镜,一種是

str = "字符串"

另一種是

str = '字符串'

直觀的區(qū)別是,一個(gè)是雙引號(hào)险毁,另一個(gè)是單引號(hào)制圈。
而實(shí)質(zhì)上的區(qū)別是们童,雙引號(hào)的內(nèi)容會(huì)對(duì)$變量進(jìn)行轉(zhuǎn)義,而單引號(hào)的則不會(huì)進(jìn)行轉(zhuǎn)義鲸鹦。
例子:

build.gradle
...
def app_name = "Demo_App"
str_one = 'App_Name = $app_name'
str_two = "App_Name = $app_name"
System.out.println("str_one = ("+str_one+")");
System.out.println("str_two = ("+str_two+")");
...

上述腳本的輸出結(jié)果是:

str_one = (App_Name = $app_name)
str_two = (App_Name = Demo_App)

4慧库、Gradle腳本中,buildConfigField方法
在App打包時(shí)馋嗜,可能想在Java代碼中根據(jù)Gradle配置的不一樣來(lái)執(zhí)行不一樣的邏輯之類的齐板,那Gradle的ProductFlavor屬性中的buildConfigField方法就派上用場(chǎng)了。
這個(gè)方法接收的參數(shù)是三個(gè)String葛菇,所以如果傳入非String參數(shù)甘磨,那在Sync Gradle的時(shí)候IDE就會(huì)提示找不到對(duì)應(yīng)的buildConfigField方法。
例子:

build.gradle
...
productFlavors{
    demo{
        buildConfigField "boolean","mIsDemo","true"
    }

}
...

這樣在demo類型的包中眯停,BuildConfig類中就會(huì)有mIsDemo的屬性值济舆。
那怎么把在Gradle腳本的前文中已定義好的參數(shù)放到buildConfigField中呢?配合本文第三條知識(shí)點(diǎn)即可庵朝。

5吗冤、ViewPager的狀態(tài)區(qū)別
ViewPager有三種狀態(tài)SCROLL_STATE_DRAGGING(用戶拖動(dòng)中)、SCROLL_STATE_IDLE(完全靜止)以及SCROLL_STATE_SETTLING(從拖動(dòng)中轉(zhuǎn)為完全靜止?fàn)顟B(tài)的過(guò)程中)九府。
常用的就SCROLL_STATE_DRAGGING和SCROLL_STATE_IDLE椎瘟。
例如拖動(dòng)的時(shí)候不響應(yīng)用戶的某些點(diǎn)擊操作,那么就可以添加一個(gè)OnPageChangeListener 侄旬,在onPageScrollStateChanged(int state)回調(diào)中肺蔚,對(duì)state為SCROLL_STATE_DRAGGING時(shí)就無(wú)視用戶點(diǎn)擊操作,在state為SCROLL_STATE_IDLE時(shí)再取消掉這個(gè)限制儡羔。
需要注意的是宣羊,即使是在ViewPager最邊上的一個(gè)Page了,再往邊界滑雖然滑不動(dòng)這個(gè)頁(yè)面汰蜘,但狀態(tài)也是會(huì)變?yōu)镾CROLL_STATE_DRAGGING仇冯,直到抬起手指了才會(huì)變回為SCROLL_STATE_IDLE狀態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末族操,一起剝皮案震驚了整個(gè)濱河市苛坚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌色难,老刑警劉巖泼舱,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異枷莉,居然都是意外死亡娇昙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門笤妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冒掌,“玉大人噪裕,你說(shuō)我怎么就攤上這事」珊粒” “怎么了州疾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)皇拣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)薄嫡,這世上最難降的妖魔是什么氧急? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮毫深,結(jié)果婚禮上吩坝,老公的妹妹穿的比我還像新娘。我一直安慰自己哑蔫,他們只是感情好钉寝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著闸迷,像睡著了一般嵌纲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腥沽,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天逮走,我揣著相機(jī)與錄音,去河邊找鬼今阳。 笑死师溅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盾舌。 我是一名探鬼主播墓臭,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼妖谴!你這毒婦竟也來(lái)了窿锉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤窖维,失蹤者是張志新(化名)和其女友劉穎榆综,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铸史,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼻疮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了琳轿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片判沟。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耿芹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挪哄,到底是詐尸還是另有隱情吧秕,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布迹炼,位于F島的核電站砸彬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斯入。R本人自食惡果不足惜砂碉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刻两。 院中可真熱鬧增蹭,春花似錦、人聲如沸磅摹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)户誓。三九已至饼灿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厅克,已是汗流浹背赔退。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留证舟,地道東北人硕旗。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像女责,于是被迫代替她去往敵國(guó)和親漆枚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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