發表文章

目前顯示的是 2月, 2019的文章

android 觸及時的水波紋效果

android Adapter的用法說明

圖片
在使用ListView或是GridView時,會使用到Adapter來定義View的內容,最簡單的方式如下: 但我們通常不會只想要List或是Grid裡面只有一個TextView的,所以這邊必須要自定義一個Adapter來使用。 例如: 最基本的adapter必須具備這樣的一個架構,而我們可以從convertView = LayoutInflater.from(context).inflate(R.layout.grid, null); 去定義R.layout.grid去修改顯示的內容 最後的結果:

android TextView單行跑馬燈設定

在textview加入以下 如果更新view的內容會造成跑馬燈的textview重繪。導致跑馬燈停下, 這個時候可以在textview外套用一個linearlayout,就可以解決。

Android-手机Mp3音乐文件显示到ListView中

精華文章 讚 原文連結

Android 影像記憶體管理心得

Android App很容易發生記憶體過量的問題,這個時候如何釋放不用的記憶體成為一門學問,但這篇心得不會講到如何釋放記憶體。 App在讀取大量圖片的情況很容易造成記憶體過量的問題,實際測試在新專案裡面,在xml設定一個ImageView,設定一張原圖大約為300kb的png的圖,居然吃掉了約10mb的記憶體空間,由於Android在讀取的時候是用Bitmap來讀圖,檔案大小會根據原圖的解析度。 所以一個頁面若是有很多圖片,開開關關就很容易造成記憶體過量。在xml定義縮圖也是沒有意義的,只會縮放大小。 (ps:兩個ImageView使用一樣的圖,並不會造成記憶體兩倍。) 這邊提供一個小心得是,在定義xml的時候,都使用同一張圖來定義ImageView,當作是預覽用,讓他佔一個空間以調整大小與距離。 之後在程式執行的時候,首先將圖全部以bitmap的方式讀進來,在一個個view設定圖片,這樣就能夠對bitmap進行真正意義的縮放,還有記憶體的釋放也容易。

android app之間使用socket做溝通

最近在製作一個兩個app之間能夠互相溝通並且傳遞一些指令的專案,這種專案適合用socket而不是URLconnection,原因如下。 A socket can implement almost a duplex kind of functionality, whereas a url connection can connect to a given URI and read its content. 經過一些研究之後了解到,要建立一個 Socket 連線,我們必須寫兩支程式,分別代表 Client 端以及 Server 端。在網路上搜尋到一個多人聊天室的範例程式,如下: Server(Server可以在能夠執行java的環境下直接執行) 1 2 client(android studio) 1 2 3 這邊值得一提的是,開Socket Server的主機ip要如何獲得,port可以隨意指定,但是ip要如何獲得呢?這邊提供一個方式 1 new Thread( new Runnable() { @Override public void run () { ChatServer server = new ChatServer() ; server.setContext(MainActivity. this ) ; server.start() ; } }).start() ; 搭配Server.java在MainAvticity加上上面這段,可以印出IP。順帶一提的是,使用Android Studio的模擬器的話,模擬器server的IP為10.0.2.15。兩台模擬器之間要互相連線的話可以參照其他網路上設定虛擬IP的方法。 在別得class創建一個新的activity 最後提一下小心得,Socket的應用於app的小心得,由於創建clinet thread的activity跟發送資料與收到資料時的activity通常不會一樣,我們必須要所有的activity收到資料都要能夠透過那個資料,做一些處理UI的事情,例如創建新的activ...

自定義view 製造水波紋的效果

要自定義View可以創一個新的class去繼承View這個類, 之後針對需要定義一些自己要的功能, 這裡提供一個類似水波紋效果的code。

利用ObjectAnimator控制view的位置

應用 使用TouchListener來控制view的移動

ClearEditText自定義

圖片
製作一個可以清除訊息的文字編輯框 使用方法如下 建立一個新的類ClearEditText繼承AppCompatEditText,我們可以在onTouchEvent裡面設定清除文字的事件 並且在onTextChange裡面設定當有文字的時候產生右邊清除按鈕的事件。 結果如下 line.xml 順帶一提,若是想要自己定義view的話,一開始會有這樣的結構: 參考資料

AsyncTask - 非同步任務

AsyncTask是一個相當好用的類別,是專門用來處理背景任務與更新UI的class。 Android 4.0 之後,網路溝通行為都不能在主執行緒(Main Thread)執行, 主執行緒又稱UI執行緒(UI Thread),任何有關UI的東西都在主執行緒中執行,若是你的程式佔據主執行緒很久,使用者體驗會非常的差, 5秒沒有反應的話也會造成程式崩潰,也就是ANR(Application Not Responding)問題,也就是應用程式沒有回應。 Log.d("onClick = " , String.valueOf(Thread.currentThread().getId()));使用這個可以印出行續的編號,若為1則為主執行續,也就是能夠更新ui的執行續。 一般要做複雜的計算並且更新UI的時候,通程會使用Thread搭配Handler一起使用 例如這樣: 不更新ui的時候可以直接使用創建thread: 需要更新ui的時候可以使用runOnUiThread,或是將runOnUiThread塞進其他thread裡面: 建立新的執行續會使用大量資源, 若是在處理一個必須頻繁的更新UI並且不斷的建立新執行續的一個任務,例如:相簿畫廊下載圖片等等,為了要方便管理我們的任務,我們可以使用AsyncTask這個class來管理thread創建的任務。 AsyncTask有四個主要步驟 若是我們需要利用AsyncTask創建的執行續建立新的view,例如下載一張圖後就新增一個ImageView並把它顯示出來的話,可以利用這樣的方式: 關鍵在於使用在MainActivity把Content傳入AsyncTask這個class讓他知道新的view要建立在哪裡。 簡單下載json資料範例