当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发之加载图片的方法

Android开发之加载图片的方法

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网