ps:本文内容來自我在知乎上對android開發中,有哪些讓你覺得相見恨晚的方法、類或接口?這一問題的回答,目前就總結這些,日後若有新的發現,随時補充。歡淫點贊。
getparent().requestdisallowintercepttouchevent(true);剝奪父view 對touch 事件的處理權,誰用誰知道。
argbevaluator.evaluate(float fraction, object startvalue, object endvalue); 用于根據一個起始顔色值和一個結束顔色值以及一個偏移量生成一個新的顔色,分分鐘實作類似于微信底部欄滑動顔色漸變。
canvas中cliprect、clippath和clipregion 剪切區域的api。
bitmap.extractalpha ();傳回一個新的bitmap,capture原始圖檔的alpha 值。有的時候我們需要動态的修改一個元素的背景圖檔又不希望使用多張圖檔的時候,通過這個方法,結合canvas 和paint 可以動态的修改一個純色bitmap的顔色。
handlerthread,代替不停new thread 開子線程的重複體力寫法。
intentservice,一個可以幹完活後自己去死且不需要我們去管理子線程的service。
palette,5.0加入的可以提取一個bitmap 中突出顔色的類,結合上面的bitmap.extractalpha,你懂的。
executors. newsinglethreadexecutor();這個是java 的,之前不知道它,自己花很大功夫去研究了單線程順序執行的任務隊列。。
android:animatelayoutchanges=”true”,linearlayout中添加view 的動畫的辦法,支援通過setlayouttransition()自定義動畫。
viewdraghelper,自定義一個子view可拖拽的viewgroup 時,處理各種事件很累吧,嗯? what the fuck!!
gradientdrawable,之前接手公司的項目,發現有個陰影效果還不錯,以為是切的圖檔,一看代碼,什麼鬼= =!
asyncqueryhandler,如果做系統工具類的開發,比如聯系人短信輔助工具等,肯定免不了和contentprovider打交道,如果資料量不是很大的情況下,随便搞,如果資料量大的情況下,了解下這個類是很有必要的,需要注意的是,這玩意兒吃異常..
viewflipper,實作多個view的切換(循環),可自定義動畫效果,且可針對單個切換指定動畫。
有朋友提到了在自定義view時有些方法在開啟硬體加速的時候沒有效果的問題,在api16之後确實有很多方法不支援硬體加速,通常我們關閉硬體加速都是在清單檔案中通過,其實android也提供了針對特定view關閉硬體加速的方法,調用view.setlayertype(view.layer_type_software, null);即可。
android util包中的pair類,可以友善的用來存儲一”組”資料。注意不是key value。
pointf,graphics包中的一個類,我們經常見到在處理touch事件的時候分别定義一個downx,一個downy用來存儲一個坐标,如果坐标少還好,如果要記錄的坐标過多那代碼就不好看了。用pointf(float x, float y);來描述一個坐标點會清楚很多。
statelistdrawable,定義selector通常的辦法都是xml檔案,但是有的時候我們的圖檔資源可能是從伺服器動态擷取的,比如很多app所謂的皮膚,這種時候就隻能通statelistdrawable
來完成了,各種addstate即可。
android:descendantfocusability,listview的item中checkbox等元素搶焦點導緻item點選事件無法響應時,除了給對應的元素設定 focusable,更簡單的是在item根布局加上android:descendantfocusability=”blocksdescendants”
android:duplicateparentstate=”true”,讓子view跟随其parent的狀态,如pressed等。常見的使用場景是某些時候一個按鈕很小,我們想要擴大其點選區域的時候通常會再給其包裹一層布局,将點選事件寫到parent上,這時候如果希望被包裹按鈕的點選效果對應的selector繼續生效的話,這時候duplicateparentstate就派上用場了。
includefontpadding=”false”,textview預設上下是有一定的padding的,有時候我們可能不需要上下這部分留白,加上它即可。
messenger,面試的時候通常都會被問到程序間通信,一般情況下大家都是開始背書,aidl巴拉巴拉。。有一天在鴻神的部落格看到這個,嗯,如他所說,又可以裝一下了。
textview.seterror();用于驗證使用者輸入。
viewconfiguration.getscaledtouchslop();觸發移動事件的最小距離,自定義view處理touch事件的時候,有的時候需要判斷使用者是否真的存在movie,系統提供了這樣的方法。
valueanimator.reverse(); 順暢的取消動畫效果。
viewstub,有的時候一塊區域需要根據情況顯示不同的布局,通常我們都會通過setvisibility的方法來顯示和隐藏不同的布局,但是這樣預設是全部加載的,用viewstub可以更好的提升性能。
ontrimmemory,在activity中重寫此方法,會在記憶體緊張的時候回調(支援多個級别),便于我們主動的進行資源釋放,避免oom。
edittxt.setimeoptions, 使用edittext彈出軟鍵盤時,修改Enter鍵的顯示内容(一直很讨厭用Enter鍵來互動,是以之前一直不知道這玩意兒)
textview.setcompounddrawablepadding,代碼設定textview的drawable padding。
imageswitcher,可以用來做圖檔切換的一個類,類似于幻燈片。
weakhashmap,直接使用hashmap有時候會帶來記憶體溢出的風險,使用waekhashmap執行個體化map。當使用者不再有對象引用的時候,weakhashmap将自動被移除對應key值的對象。
本文作者:佚名
來源:51cto