欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发之加载图片的方法

程序员文章站 2022-11-05 15:46:48
本文实例讲述了android开发之加载图片的方法。分享给大家供大家参考。具体分析如下: 加载网络上的图片需要在manifest中配置访问网络的权限,如下:

本文实例讲述了android开发之加载图片的方法。分享给大家供大家参考。具体分析如下:

加载网络上的图片需要在manifest中配置访问网络的权限,如下:

<uses-permission android:name="android.permission.internet" />

如果不配置这个权限的话,会报错:unknown host exception。

package com.example.loadimgfromweb; 
import java.io.inputstream; 
import android.app.activity; 
import android.graphics.bitmap; 
import android.graphics.bitmapfactory; 
import android.os.asynctask; 
import android.os.bundle; 
import android.view.menu; 
import android.widget.imageview; 
public class mainactivity extends activity { 
  @override 
  protected void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.activity_main); 
    imageview v = (imageview) findviewbyid(r.id.imageview1); 
    string url = "http://minimg.hexun.com/i1.hexunimg.cn/2011-11-07/134970028_200x150.jpg"; 
    new downloadimage(v).execute(url); 
  } 
  @override 
  public boolean oncreateoptionsmenu(menu menu) { 
    // inflate the menu; this adds items to the action bar if it is present. 
    getmenuinflater().inflate(r.menu.activity_main, menu); 
    return true; 
  } 
  public class downloadimage extends asynctask<string, void, bitmap> {
    imageview imageview; 
    public downloadimage(imageview imageview) { 
      this.imageview = imageview; 
    } 
    @override 
    protected bitmap doinbackground(string... urls) { 
      string url = urls[0]; 
      bitmap tmpbitmap = null; 
      try { 
        inputstream is = new java.net.url(url).openstream(); 
        tmpbitmap = bitmapfactory.decodestream(is); 
      } catch (exception e) { 
        e.printstacktrace(); 
      } 
      return tmpbitmap; 
    } 
    @override 
    protected void onpostexecute(bitmap result) { 
      imageview.setimagebitmap(result); 
    } 
  } 
}

上面的例子中使用了asynctask来与前端用户界面进行交互。避免加载时间过长,影响界面的交互性。

如果是加载本地图片的话,直接来:

imageview v = (imageview) findviewbyid(r.id.imageview1); 
    v.setimageresource(r.drawable.apic); 

在使用asynctask加载图片的时候可以顺便把图片保存在本地:

@override 
protected bitmap doinbackground(string... urls) { 
  string url = urls[0]; 
  bitmap tmpbitmap = null; 
  try { 
 inputstream is = new java.net.url(url).openstream(); 
 url u = new url(url); 
 httpurlconnection conn = (httpurlconnection) u.openconnection();
 bitmap bitmap = bitmapfactory.decodestream(is); 
 // 判断是否有内存卡 
 if (environment.getexternalstoragestate().equals( 
 environment.media_mounted)) {
   // 保存图片到本地 
   file sdcarddir = environment.getexternalstoragedirectory();
   string filename = "a.jpg"; 
   string filepath = sdcarddir + "/" + filename; 
   fileoutputstream fos = new fileoutputstream(filepath); 
   bitmap.compress(bitmap.compressformat.png, 100, fos); 
 } 
 // 关闭流 
 is.close(); 
 conn.disconnect(); 
 return bitmap; 
  } catch (exception e) { 
 e.printstacktrace(); 
  } 
  return tmpbitmap; 
} 

希望本文所述对大家的android程序设计有所帮助。