简易图片画廊
Volley入门
添加volley依赖:
implementation 'com.android.volley:volley:1.1.1'
使用Volley获取数据:
String url="https://www.jd.com";
final TextView textView=findViewById(R.id.textView);
//创建一个请求队列
RequestQueue queue= Volley.newRequestQueue(this);
//创建一个request,可以请求string的request或json的request
//参数:请求类型(获取|上传),网址,成功回调、错误回调
StringRequest stringRequest=new StringRequest(
StringRequest.Method.GET,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
textView.setText(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG,"onErrorResponse",error);
}
}
);
queue.add(stringRequest);
使用volley加载图片:
String url="https://cdn.pixabay.com/photo/2020/09/02/18/03/girl-5539094_960_720.jpg";
final ImageView imageView=findViewById(R.id.imageView);
//创建一个请求队列
RequestQueue queue= Volley.newRequestQueue(this);
//第一个参数是请求队列,第二个参数是缓存(此处没有设置)
ImageLoader imageLoader=new ImageLoader(queue, new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String url) {
return null;
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
});
//获取图片
imageLoader.get(url, new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
imageView.setImageBitmap(response.getBitmap());
}
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG,"onErrorResponse",error);
}
});
为ImageLoader设置缓存:
ImageLoader imageLoader=new ImageLoader(queue, new ImageLoader.ImageCache() {
private LruCache<String,Bitmap> cache=new LruCache<>(50);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url,bitmap);
}
});
使用NetWorkImageView来加载图片:
final NetworkImageView imageView=findViewById(R.id.imageView);
//创建一个请求队列
RequestQueue queue= Volley.newRequestQueue(this);
//第一个参数是请求队列,第二个参数是缓存(此处没有设置)
ImageLoader imageLoader=new ImageLoader(queue, new ImageLoader.ImageCache() {
private LruCache<String,Bitmap> cache=new LruCache<>(50);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url,bitmap);
}
});
//获取图片
imageView.setImageUrl(url,imageLoader);
Glide入门
添加Glide依赖:
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
使用Glide来获取、显示图片:
Glide.with(this)
.load(url)
.placeholder(R.drawable.ic_launcher_background)//占位符
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(imageView);
Glide会自动处理缓存等问题。
Swiperefreshlayout入门
下拉刷新
添加Swiperefreshlayout依赖:
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
设置下拉触发器:
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadImage();
}
});
在资源就绪或者下载失败时取消加载的动画:
void loadImage(){
Random random=new Random();
String url =random.nextBoolean()?url1:url2;
Glide.with(this)
.load(url)
.placeholder(R.drawable.ic_launcher_background)//占位符
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
if (swipeRefreshLayout.isRefreshing()){
swipeRefreshLayout.setRefreshing(false);
}
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
if (swipeRefreshLayout.isRefreshing()){//当资源就绪时,取消下拉
swipeRefreshLayout.setRefreshing(false);
}
return false;
}
})
.into(imageView);
}