博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android三种基本的加载网络图片方式(转)
阅读量:4654 次
发布时间:2019-06-09

本文共 6747 字,大约阅读时间需要 22 分钟。

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

转载于:https://www.cnblogs.com/YangBinChina/p/4596961.html

你可能感兴趣的文章
Box2D的三种Body类型
查看>>
SQL Server 下取中位数(中位值)的方法
查看>>
Using databases and Structured Query Language (SQL)
查看>>
网络对抗作业一
查看>>
路径规划效果图
查看>>
JAVA-注解规范
查看>>
Jmeter下进行ip伪造
查看>>
如何解决SQL Server 2008 无法连接到(local)
查看>>
mysql的数据结构
查看>>
【目标流畅阅读文献】kick off
查看>>
Python学习之路-26 Socket
查看>>
mysqldump不得不说的秘密
查看>>
优化Android Studio/Gradle构建(转)
查看>>
DDD领域模型数据访问权限之用户权限(十)
查看>>
VM 的安装与简介
查看>>
[转]PHP 判断数组是否为空的几种方法
查看>>
使用watch定时执行命令并显示结果
查看>>
转载:javaweb学习总结(三十)——EL函数库
查看>>
用matplotlib库画图
查看>>
读完这篇文章,再决定做不做博后吧
查看>>