android手机上,我们常用imageview显示图片,我们本章获取网络图片并显示在imageview中。
一、设计界面
1、布局文件
打开res/layout/activity_main.xml文件。
输入以下代码:
1
2
3
4
5
6
7
8
9
10
|
<?xml version= "." encoding= "utf-" ?>
<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:orientation= "vertical"
android:layout_width= "match_parent"
android:layout_height= "match_parent" >
<imageview
android:id= "@+id/imagephoto"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content" />
</linearlayout>
|
二、程序文件
打开“src/com.genwoxue.networkphoto/mainactivity.java”文件。
然后输入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
package com.genwoxue.networkphoto;
import java.io.ioexception;
import java.io.inputstream;
import java.net.httpurlconnection;
import java.net.malformedurlexception;
import java.net.url;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.os.asynctask;
import android.os.bundle;
import android.widget.imageview;
public class mainactivity extends activity {
private imageview imview;
@override
public void oncreate(bundle savedinstancestate) {
super .oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
imview = (imageview) findviewbyid(r.id.imagephoto);
string imageurl = "http://img.baidu.com/img/image/ilogob.gif" ;
new networkphoto().execute(imageurl);
}
/* 四个步骤:
* ()onpreexecute(),执行预处理,它运行于ui线程,
* 可以为后台任务做一些准备工作,比如绘制一个进度条控件。
* ()doinbackground(params...),后台进程执行的具体计算在这里实现,
* doinbackground(params...)是asynctask的关键,此方法必须重载。
* 在这个方法内可以使用 publishprogress(progress...)改变当前的进度值。
* ()onprogressupdate(progress...),运行于ui线程。如果
* 在doinbackground(params...) 中使用了publishprogress(progress...),就会
* 触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。
* ()onpostexecute(result),运行于ui线程,可以对后台任务的结果做出处理,结果
* 就是doinbackground(params...)的返回值。此方法也要经常重载,如果result为
* null表明后台任务没有完成(被取消或者出现异常)。 *
*/
//本案例我们仅使用了()和()
class networkphoto extends asynctask<string, integer, bitmap> {
public networkphoto() {
}
//doinbackground(params...),后台进程执行的具体计算在这里实现,是asynctask的关键,此方法必须重载。
@override
protected bitmap doinbackground(string... urls) {
url url = null ;
bitmap bitmap = null ;
httpurlconnection conn= null ;
inputstream is= null ;
try {
url = new url(urls[]);
} catch (malformedurlexception e) {
e.printstacktrace();
}
try {
conn = (httpurlconnection) url.openconnection();
conn.setdoinput( true );
conn.connect();
is = conn.getinputstream();
bitmap = bitmapfactory.decodestream(is);
is.close();
} catch (ioexception e) {
e.printstacktrace();
} finally {
if (conn!= null ){
conn.disconnect();
conn= null ;
}
if (is!= null ) {
try {
is.close();
} catch (ioexception e) {
e.printstacktrace();
}
is= null ;
}
}
return bitmap;
}
//onpostexecute(result),运行于ui线程,可以对后台任务的结果做出处理,结果
//就是doinbackground(params...)的返回值。
@override
protected void onpostexecute(bitmap bitmap) {
// 返回结果bitmap显示在imageview控件
imview.setimagebitmap(bitmap);
}
}
}
|
三、配置文件
打开“androidmanifest.xml”文件。
然后输入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml version= "." encoding= "utf-" ?>
<manifest xmlns:android= "http://schemas.android.com/apk/res/android"
package = "com.genwoxue.networkphoto"
android:versioncode= ""
android:versionname= "." >
<uses-sdk
android:minsdkversion= ""
android:targetsdkversion= "" />
<uses-permission android:name= "android.permission.internet" />
<application
android:allowbackup= "true"
android:icon= "@drawable/ic_launcher"
android:label= "@string/app_name"
android:theme= "@style/apptheme" >
<activity
android:name= "com.genwoxue.networkphoto.mainactivity"
android:label= "@string/app_name" >
<intent-filter>
<action android:name= "android.intent.action.main" />
<category android:name= "android.intent.category.launcher" />
</intent-filter>
</activity>
</application>
</manifest>
|
注意:需要在androidmanifest.xml文件中添加权限:
1
|
<uses-permission android:name= "android.permission.internet" />
|