如何不斷獲取圖片並顯示出來,達到視頻的效果?

來源:文萃谷 4.91K

如何不斷獲取圖片並顯示出來,達到視頻的效果?

 如何不斷獲取圖片並顯示出來,達到視頻的效果?

本文實例講述了Android實現從網絡獲取圖片顯示並保存到SD卡的方法。分享給大家供大家參考,具體如下:

問題:

如何不斷獲取圖片並顯示出來,達到視頻的效果?

代碼:

public class GetPictureFromInternetActivity extends Activity { private ImageView imageView; public void onCreate(Bundle savedInstanceState) { eate(savedInstanceState); setContentView(); String url = "http://img1.gcimg.net/att/day_120330/1203301402671605a8a7994804.png"; // String url = "http://www.gezila.com/uploads/allimg/110110/1_110110084544_1.jpg"; imageView = (ImageView) ViewById(eView); Bitmap bitmap = getHttpBitmap(url);//從網絡獲取圖片 mageBitmap(bitmap); savePicture(bitmap);//保存圖片到SD卡 } public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); InputStream in = Stream(); bitmap = deStream(in); e(); } catch (MalformedURLException e) { tStackTrace(); } catch (IOException e) { tStackTrace(); } return bitmap; } public void savePicture(Bitmap bitmap) { String pictureName = "/mnt/sdcard/" + "car"+".jpg"; File file = new File(pictureName); FileOutputStream out; try { out = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); h(); e(); } catch (FileNotFoundException e) { tStackTrace(); } catch (IOException e) { tStackTrace(); } } public boolean onCreateOptionsMenu(Menu menu) { eateOptionsMenu(menu); MenuItem item = (, , , "Exit"); nMenuItemClickListener(new nuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { (0); return true; } }); return true; } }

注意:1、權限問題

涉及網絡時的權限:複製代碼 代碼如下:

涉及SD卡讀寫權限:複製代碼 代碼如下:

問題分解:

問題1、如何從網絡獲取圖片並顯示:

問題2、如何不斷顯示圖片:

擴展:如何保存獲取到的圖片:

問題1解決方案:

看似有三種選擇方案,其實質就一種模式,換湯不換藥。先通過統一資源定位器URl(uniform resource location)獲取一個讀取圖片流,然後將其解壓成Bitmap,最後顯示出來。具體實現代碼如下:

選擇1:直接類URL打開一個流,最簡單實用。

public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); InputStream in = Stream(); bitmap = deStream(in); e(); } catch (MalformedURLException e) { tStackTrace(); } catch (IOException e) { tStackTrace(); } return bitmap; }

選擇2:用到類URLConnection打開連接

public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); URLConnection con = Connection(); InputStream in = nputStream(); bitmap = deStream(in); e(); } catch (MalformedURLException e) { tStackTrace(); } catch (IOException e) { tStackTrace(); } return bitmap; }

選擇3:用到類HttpURLConnection打開連接

public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); HttpURLConnection con = (HttpURLConnection) Connection(); InputStream in = nputStream(); bitmap = deStream(in); e(); } catch (MalformedURLException e) { tStackTrace(); } catch (IOException e) { tStackTrace(); } return bitmap; }

問題2解決方案:

很容易想到開啟一個定時器,每隔多久執行一次。

還有一種方案就是開一個線程,在while死循環裏面用一個sleep睡一會兒。

保存獲取到的圖片解決方法:

保存圖片,自然就涉及到SD卡上文件讀寫操作,這裏是將Bitmap直接寫入文件。聯想到肯定要用到流,想到這就好辦事了,不過還需要了解到BitmapFactory類的強大之處,這裏展示了用系統時間為保存文件名稱的實現過程,有一個好處就是可以任意保存,無需考慮覆蓋和越界問題。

public void savePicture(Bitmap bitmap) { if (xternalStorageState()ls(A_MOUNTED)) { try { File sdcardDir = Environment xternalStorageDirectory(); Time t = new Time(); oNow(); String filename = anonicalPath() + "/DCIM/camera" + at( "/ReeCam%04d%02d%02d%02d%02d%02d.jpg", , h + 1, hDay, , te, nd); File file = new File(filename); FileOutputStream out = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); h(); e(); } catch (FileNotFoundException e) { tStackTrace(); } catch (IOException e) { tStackTrace(); } } }

註釋:這裏用到的bitmap就是上面生成的bitmap。

看到這個問題就感覺像是高中時的綜合題目一樣,將其分解成簡單的問題,將每個小問題解決,那麼複雜問題自然就可以解決了。記得前幾天看了篇帖子,主題是“當問題被分解成更小的問題後,所有的.問題都變得如此簡單,而且所有的問題都能這樣去分解。”何為牛人,就是遇到複雜問題時,能保持清晰的思路,分析問題的流程,然後將其分解成足夠小的問題,一個個解決,最後再組合。就如看到一輛小車,零件之多,有點小複雜吧,然而我們如下去分解:四個輪子和車殼,然後輪子再分而鋼圈和輪胎皮, 輪胎皮再分解為內胎和外胎。然後你要做的事就是找到生產輪胎和鋼圈的廠家購買這兩樣組件,然後再利用第三方或者其它工具去組裝成車輪。這裏輪胎和鋼圈相當於Java裏面類,第三方或其他組裝工具,就如你的代碼,將它們和發動機組裝再一起就實現了車子跑到的功能。學會分解思維,最常用的就是二分法,當然還得具體問題具體分析。

希望本文所述對大家Android程序設計有所幫助。

熱門標籤