亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

 如何不斷獲取圖片并顯示出來(lái),達(dá)到視頻的效果?

時(shí)間:2022-11-24 19:22:30 效果 我要投稿
  • 相關(guān)推薦

 如何不斷獲取圖片并顯示出來(lái),達(dá)到視頻的效果?

  本文實(shí)例講述了Android實(shí)現(xiàn)從網(wǎng)絡(luò)獲取圖片顯示并保存到SD卡的方法。分享給大家供大家參考,具體如下:

  問題:

  如何不斷獲取圖片并顯示出來(lái),達(dá)到視頻的效果?

  代碼:

  public class GetPictureFromInternetActivity extends Activity { private ImageView imageView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); 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) this.findViewById(R.id.imageView); Bitmap bitmap = getHttpBitmap(url);//從網(wǎng)絡(luò)獲取圖片 imageView.setImageBitmap(bitmap); savePicture(bitmap);//保存圖片到SD卡 } public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); InputStream in = pictureUrl.openStream(); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 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); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit"); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { System.exit(0); return true; } }); return true; } }

  注意:1、權(quán)限問題

  涉及網(wǎng)絡(luò)時(shí)的權(quán)限:復(fù)制代碼 代碼如下:

  涉及SD卡讀寫權(quán)限:復(fù)制代碼 代碼如下:

  問題分解:

  問題1、如何從網(wǎng)絡(luò)獲取圖片并顯示:

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

  擴(kuò)展:如何保存獲取到的圖片:

  問題1解決方案:

  看似有三種選擇方案,其實(shí)質(zhì)就一種模式,換湯不換藥。先通過統(tǒng)一資源定位器URl(uniform resource location)獲取一個(gè)讀取圖片流,然后將其解壓成Bitmap,最后顯示出來(lái)。具體實(shí)現(xiàn)代碼如下:

  選擇1:直接類URL打開一個(gè)流,最簡(jiǎn)單實(shí)用。

  public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); InputStream in = pictureUrl.openStream(); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }

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

  public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); URLConnection con = pictureUrl.openConnection(); InputStream in = con.getInputStream(); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }

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

  public Bitmap getHttpBitmap(String url) { Bitmap bitmap = null; try { URL pictureUrl = new URL(url); HttpURLConnection con = (HttpURLConnection) pictureUrl.openConnection(); InputStream in = con.getInputStream(); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }

  問題2解決方案:

  很容易想到開啟一個(gè)定時(shí)器,每隔多久執(zhí)行一次。

  還有一種方案就是開一個(gè)線程,在while死循環(huán)里面用一個(gè)sleep睡一會(huì)兒。

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

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

  public void savePicture(Bitmap bitmap) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { try { File sdcardDir = Environment .getExternalStorageDirectory(); Time t = new Time(); t.setToNow(); String filename = sdcardDir.getCanonicalPath() + "/DCIM/camera" + String.format( "/ReeCam%04d%02d%02d%02d%02d%02d.jpg", t.year, t.month + 1, t.monthDay, t.hour, t.minute, t.second); File file = new File(filename); FileOutputStream out = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

  注釋:這里用到的bitmap就是上面生成的bitmap。

  看到這個(gè)問題就感覺像是高中時(shí)的綜合題目一樣,將其分解成簡(jiǎn)單的問題,將每個(gè)小問題解決,那么復(fù)雜問題自然就可以解決了。記得前幾天看了篇帖子,主題是“當(dāng)問題被分解成更小的問題后,所有的問題都變得如此簡(jiǎn)單,而且所有的問題都能這樣去分解。”何為牛人,就是遇到復(fù)雜問題時(shí),能保持清晰的思路,分析問題的流程,然后將其分解成足夠小的問題,一個(gè)個(gè)解決,最后再組合。就如看到一輛小車,零件之多,有點(diǎn)小復(fù)雜吧,然而我們?nèi)缦氯シ纸猓核膫(gè)輪子和車殼,然后輪子再分而鋼圈和輪胎皮, 輪胎皮再分解為內(nèi)胎和外胎。然后你要做的事就是找到生產(chǎn)輪胎和鋼圈的廠家購(gòu)買這兩樣組件,然后再利用第三方或者其它工具去組裝成車輪。這里輪胎和鋼圈相當(dāng)于Java里面類,第三方或其他組裝工具,就如你的代碼,將它們和發(fā)動(dòng)機(jī)組裝再一起就實(shí)現(xiàn)了車子跑到的功能。學(xué)會(huì)分解思維,最常用的就是二分法,當(dāng)然還得具體問題具體分析。

  希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

【 如何不斷獲取圖片并顯示出來(lái),達(dá)到視頻的效果?】相關(guān)文章:

溝通如何達(dá)到效果11-25

如何慢跑能達(dá)到健身效果11-30

如何慢跑才能達(dá)到最好的健身效果11-30

如何運(yùn)動(dòng)能達(dá)到提臀的效果12-01

要如何讓溝通達(dá)到最好的效果07-25

如何達(dá)到用影像激發(fā)觀者的食欲的效果11-30

如何用瑜伽來(lái)達(dá)到瘦腰的效果11-23

白領(lǐng)如何正確喝水才有達(dá)到排毒的效果11-29

糖尿病人如何運(yùn)動(dòng)才能達(dá)到最好效果11-23

薪酬達(dá)到激勵(lì)效果的方法11-27