編輯:Android開發教程
項目源碼下載
https://github.com/Wang-Jun-Chao/AndroidProjects
網絡圖片查看器
確定圖片的網址
發送http請求
URL url = URL(address); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(); conn.setReadTimeout(); conn.setRequestMethod(); conn.getResponseCode();
服務器的圖片是以流的形式返回給浏覽器的
InputStream = conn.getInputStream(); Bitmap bm = BitmapFactory.decodeStream();
把圖片設置為ImageView的顯示內容
ImageView iv = (ImageView) findViewById(R) iv(bm)
添加權限
在Android中,主線程被阻塞會導致應用不能刷新ui界面,不能響應用戶操作,用戶體驗將非常差
主線程阻塞時間過長,系統會拋出ANR異常
ANR:Application Not Response;應用無響應
任何耗時操作都不可以寫在主線程
因為網絡交互屬於耗時操作,如果網速很慢,代碼會阻塞,所以網絡交互的代碼不能運行在主線程
刷新ui的代碼只能運行在主線程,運行在子線程是沒有任何效果的
如果需要在子線程中刷新ui,使用消息隊列機制
Looper一旦發現Message Queue中有消息,就會把消息取出,然後把消息扔給Handler對象,Handler會調用自己的handleMessage方法來處理這條消息
handleMessage方法運行在主線程
主線程創建時,消息隊列和輪詢器對象就會被創建,但是消息處理器對象,需要使用時,自行創建
Handler handler = Handler(){ (android.os.Message msg) { } };
在子線程中往消息隊列裡發消息
msg = new (); msg.obj = bm; msg.what = ; handler.sendMessage(msg);
通過switch語句區分不同的消息
public void handleMessage(android msg) { switch (msg) { //如果是,說明屬於請求成功的消息 case : ImageView iv = (ImageView) findViewById(R) Bitmap bm = (Bitmap) msg iv(bm) case : Toast(MainActivity, , )() } }
更多精彩內容:http://www.bianceng.cn/OS/extra/
把服務器返回的流裡的數據讀取出來,然後通過文件輸入流寫至本地文件
InputStream = conn.getInputStream(); FileOutputStream fos = FileOutputStream(file); [] b = []; len = ; ((len = .read(b)) != -){ fos.write(b, , len); }
創建bitmap對象的代碼改成
Bitmap bm = BitmapFactory(file())
每次發送請求前檢測一下在緩存中是否存在同名圖片,如果存在,則讀取緩存
code.google.com
github.com
在github搜索smart-image-view
下載開源項目smart-image-view
使用自定義組件時,標簽名字要寫包名
</>
SmartImageView的使用
SmartImageView siv = (SmartImageView) findViewById(R) siv()
NinePatchDrawable 繪畫的是一個可以伸縮的位圖圖像,Android會自動調整 大小來容納顯示的內容。一個例子就是NinePatch為背景,使用標准的And
前段時間,我學習了自定義View,基本能夠繪制一些比較好看的控件,那麼今天開始,我將會學習屬性動畫。前面我也簡單的看過屬性動畫的概念,然後也是看了一下效果,了解了一些基本
這段時間在學Android應用開發,在想既然是用Java開發的應該很好反編譯從而得到源代碼吧,google了一下,確實很簡單, 以下是我的實踐過程。在此鄭重聲明,貼出來的
最近在考慮為已經有的一個應用程序增加一個用戶反饋的功能,用戶可以通過反饋功能將用戶的意見和建議、程序出現的問題以一種更符合用戶習慣的方式反饋回來。網上也有一些實現好的反饋