Android三种基本的加载网络图片方式,包括普通加载网络方式、用ImageLoader加载图片、用Volley加载图片。
1. [代码]普通加载网络方式
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
|
public class NormalLoadPictrue {
private String uri;
private ImageView imageView;
private byte [] picByte;
public void getPicture(String uri,ImageView imageView){
this .uri = uri;
this .imageView = imageView;
new Thread(runnable).start();
}
@SuppressLint ( "HandlerLeak" )
Handler handle = new Handler(){
@Override
public void handleMessage(Message msg) {
super .handleMessage(msg);
if (msg.what == 1 ) {
if (picByte != null ) {
Bitmap bitmap = BitmapFactory.decodeByteArray(picByte, 0 , picByte.length);
imageView.setImageBitmap(bitmap);
}
}
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
URL url = new URL(uri);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod( "GET" );
conn.setReadTimeout( 10000 );
if (conn.getResponseCode() == 200 ) {
InputStream fis = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte [] bytes = new byte [ 1024 ];
int length = - 1 ;
while ((length = fis.read(bytes)) != - 1 ) {
bos.write(bytes, 0 , length);
}
picByte = bos.toByteArray();
bos.close();
fis.close();
Message message = new Message();
message.what = 1 ;
handle.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
} |
2. [代码]用ImageLoader加载图片
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
|
public class ImageLoaderPicture {
private DisplayImageOptions options;
public ImageLoaderPicture(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2 )
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator( new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging()
.memoryCache( new WeakMemoryCache())
.build();
ImageLoader.getInstance().init(config);
options = new DisplayImageOptions.Builder()
.showStubImage( 0 )
.showImageForEmptyUri( 0 )
.showImageOnFail( 0 )
.cacheInMemory().cacheOnDisc()
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.bitmapConfig(android.graphics.Bitmap.Config.RGB_565)
.build();
}
public DisplayImageOptions getOptions() {
return options;
}
public void setOptions(DisplayImageOptions options) {
this .options = options;
}
} |
3. [代码]用Volley加载图片
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
|
public class VolleyLoadPicture {
private ImageLoader mImageLoader = null ;
private BitmapCache mBitmapCache;
private ImageListener one_listener;
public VolleyLoadPicture(Context context,ImageView imageView){
one_listener = ImageLoader.getImageListener(imageView, 0 , 0 );
RequestQueue mRequestQueue = Volley.newRequestQueue(context);
mBitmapCache = new BitmapCache();
mImageLoader = new ImageLoader(mRequestQueue, mBitmapCache);
}
public ImageLoader getmImageLoader() {
return mImageLoader;
}
public void setmImageLoader(ImageLoader mImageLoader) {
this .mImageLoader = mImageLoader;
}
public ImageListener getOne_listener() {
return one_listener;
}
public void setOne_listener(ImageListener one_listener) {
this .one_listener = one_listener;
}
class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> mCache;
private int sizeValue;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024 ;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
sizeValue = value.getRowBytes() * value.getHeight();
return sizeValue;
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
} |
4. [代码]Activity
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
|
public class MainActivity extends Activity {
private ImageView imageView001,imageView002,imageView003;
public static final String picUrl = "http://img.quwenjiemi.com/2014/0701/thumb_420_234_20140701112917406.jpg" ;
//public static final String picUrl = "http://192.168.1.181:8081/AndroidSerivces/house.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView001 = (ImageView)findViewById(R.id.imageView001);
imageView002 = (ImageView)findViewById(R.id.imageView002);
imageView003 = (ImageView)findViewById(R.id.imageView003);
//用普通方法加载图片
new NormalLoadPictrue().getPicture(picUrl,imageView001);
//用ImageLoader加载图片
ImageLoader.getInstance().displayImage(picUrl, imageView002, new ImageLoaderPicture( this ).getOptions(), new SimpleImageLoadingListener());
//用Volley加载图片
VolleyLoadPicture vlp = new VolleyLoadPicture( this , imageView003);
vlp.getmImageLoader().get(picUrl, vlp.getOne_listener());
}
} |
5. [代码]布局文件
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
|
<ScrollView xmlns:android= "http://schemas.android.com/apk/res/android"
xmlns:tools= "http://schemas.android.com/tools"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
tools:context= ".MainActivity" >
<RelativeLayout
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:padding= "10dp" >
<TextView
android:id= "@+id/textView001"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "1.用普通方法的加载图片" />
<ImageView
android:id= "@+id/imageView001"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_below= "@+id/textView001" />
<TextView
android:id= "@+id/textView002"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_below= "@+id/imageView001"
android:text= "2.用Android-Universal-Image-Loader加载图片" />
<ImageView
android:id= "@+id/imageView002"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_below= "@+id/textView002" />
<TextView
android:id= "@+id/textView003"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_below= "@+id/imageView002"
android:text= "3.用Volley加载图片" />
<ImageView
android:id= "@+id/imageView003"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_below= "@+id/textView003" />
</RelativeLayout>
</ScrollView> |
6. [文件] 三种基本网络加载图片方式.rar ~ 2MB 下载
转自:http://www.oschina.net/code/snippet_1470644_36944