布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ImageRequest"
android:id="@+id/btn_image_request"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ImageLoader"
android:id="@+id/btn_image_loader"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NetworkImageView"
android:id="@+id/btn_net_work_iv"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Glide"
android:id="@+id/btn_glide"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/iv_show"/>
<com.android.volley.toolbox.NetworkImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/net_work_iv"
/>
</LinearLayout>
MainActivity
package com.example.helloworld;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;
public class MainActivity extends AppCompatActivity {
private Button btn_image_request;
private Button btn_image_loader;
private ImageView iv_show;
private RequestQueue requestQueue;
private BitmapCache bitmapCache;
private NetworkImageView net_work_iv;
private Button btn_net_work_iv;
private Button btn_glide;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bitmapCache = new BitmapCache();
requestQueue = Volley.newRequestQueue(MainActivity.this);
btn_image_request = findViewById(R.id.btn_image_request);
btn_image_request.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
useImageReques();
}
});
iv_show = findViewById(R.id.iv_show);
btn_image_loader = findViewById(R.id.btn_image_loader);
btn_image_loader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
useImageLoader();
}
});
net_work_iv = findViewById(R.id.net_work_iv);
btn_net_work_iv = findViewById(R.id.btn_net_work_iv);
btn_net_work_iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
net_work_iv.setDefaultImageResId(R.drawable.loading);
net_work_iv.setErrorImageResId(R.drawable.load_fail);
String url = "http://www.gdcp.edu.cn/service?token=e32c902f50c44c04923842e735ae15eb";
net_work_iv.setImageUrl(url, new ImageLoader(requestQueue, bitmapCache));
}
});
// 王炸 Glide
btn_glide = findViewById(R.id.btn_glide);
btn_glide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = "http://www.gdcp.edu.cn/service?token=e32c902f50c44c04923842e735ae15eb";
// 一行代码解决所有问题
Glide.with(MainActivity.this).load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.load_fail)
.into(iv_show);
}
});
}
// 使用ImageLoader加载图片
private void useImageLoader() {
/*ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String s) {
Log.e("ImageLoader", "getBitmap s = " + s);
return null;
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
Log.e("ImageLoader", "putBitmap s = " + s + " bitmapsize = " + bitmap.getByteCount());
}
});*/
// 使用BitmapCache
ImageLoader imageLoader = new ImageLoader(requestQueue, bitmapCache);
ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(iv_show,
R.drawable.loading, R.drawable.load_fail);
String imgUrl = "http://www.gdcp.edu.cn/service?token=9c2e74734dfd4f699487d9b184676a49";
imageLoader.get(imgUrl, imageListener);
}
// 使用ImageRequest加载图片
private void useImageReques() {
String imgUrl = "http://www.gdcp.edu.cn/service?token=9c2e74734dfd4f699487d9b184676a49";
ImageRequest imageRequest = new ImageRequest(imgUrl, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
Log.e("ImageRequest", "bitmap1 = " + bitmap.getByteCount());
Log.e("ImageRequest", "bitmap2 = " + bitmap.getRowBytes() * bitmap.getHeight());
iv_show.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.ARGB_8888,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("ImageRequest", "volleyError = " + volleyError.getMessage());
}
});
requestQueue.add(imageRequest);
}
}
BitmapCache
package com.example.helloworld;
import android.graphics.Bitmap;
import android.util.Log;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader;
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> lruCache;
public BitmapCache() {
final int MAX_SIZE = 10 * 1024 * 1024;
lruCache = new LruCache<String, Bitmap>(MAX_SIZE){
@Override
protected int sizeOf(String url, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
Log.e("BitmapCache", "getBitmap url" + url);
return lruCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
Log.e("BitmapCache", "putBitmap " + bitmap.getByteCount() + " url = " + url);
lruCache.put(url, bitmap);
}
}
添加Glide依赖
在app文件夹 build.gradle 的dependencies中添加
implementation 'com.github.bumptech.glide:glide:3.7.0'