Volley加载图片的介绍及用法
来源:互联网 发布:linux 编译链接静态库 编辑:程序博客网 时间:2024/04/29 09:27
声明:
该文是参照慕客网视频所整理,参考链接:
http://www.imooc.com/learn/468
1.缓存功能简单介绍
实现网络图片缓存: LruCache ImageCache
2.加载网络图片及监听
网络图片加载: ImageRequest ImageLoader 网络图片的显示: NetworkImageView ImageView
3.实例一:使用ImageRequest实现网络图片加载
MyApplication.java
import android.app.Application;import com.android.volley.RequestQueue;import com.android.volley.toolbox.Volley;public class MyApplication extends Application{ public static RequestQueue queue; @Override public void onCreate() { super.onCreate(); queue = Volley.newRequestQueue(getApplicationContext()); } public static RequestQueue getHttpQueue(){ return queue; }}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.learning.volleydemo06"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" android:name=".MyApplication"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
MainActivity.java
import android.graphics.Bitmap;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.toolbox.ImageRequest;public class MainActivity extends AppCompatActivity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); String url = "http://imgsrc.baidu.com/forum/w=580/sign=b6a55730c81b9d168ac79a69c3dfb4eb/b168d5c451da81cbf9b846225466d0160824318d.jpg"; /** * 通过Volley加载网络图片 * * new ImageRequest( * String url, * Listener listener, * int maxWidth, * int maxHeight, * Config decodeConfig, * ErrorListener errorListener) * * url:请求地址 * listener:请求成功后的回调 * maxWidth、maxHeight:设置图片的最大宽高,如果均设为0则表示按原尺寸显示 * decodeConfig:图片像素的储存方式。 * Config.RGB_565表示每个像素占2个字节, * Config.ARGB_8888表示每个像素占4个字节等。 * errorListener:请求失败的回调 */ ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap bitmap) { imageView.setImageBitmap(bitmap); } }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { imageView.setImageResource(R.mipmap.ic_launcher); } }); MyApplication.getHttpQueue().add(request); } private void initView(){ imageView = (ImageView) findViewById(R.id.iv_image); }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <ImageView android:id="@+id/iv_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/></LinearLayout>
运行结果:
4.实例二:使用ImageCache、LruCache、ImageLoader、ImageListener实现网络图片加载(单独使用ImageCache是起不到缓存效果的)
修改MainActivity.java如下:
MainActivity.java
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ImageView;import com.android.volley.toolbox.ImageLoader;public class MainActivity extends AppCompatActivity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); String url = "http://imgsrc.baidu.com/forum/w=580/sign=b6a55730c81b9d168ac79a69c3dfb4eb/b168d5c451da81cbf9b846225466d0160824318d.jpg"; ImageLoader loader = new ImageLoader(MyApplication.getHttpQueue(), new BitmapCache()); //监听图片的加载过程 ImageLoader.ImageListener listener = ImageLoader.getImageListener( imageView,//控件 R.mipmap.ic_launcher,//默认加载的图片 R.mipmap.ic_launcher);//出错时加载的图片 loader.get(url,listener); } private void initView(){ imageView = (ImageView) findViewById(R.id.iv_image); }}
新建BitmapCache.java
BitmapCache.java
import android.annotation.TargetApi;import android.graphics.Bitmap;import android.os.Build;import android.util.LruCache;import com.android.volley.toolbox.ImageLoader;public class BitmapCache implements ImageLoader.ImageCache { public LruCache<String,Bitmap> cache; //LruCache最大缓存内存大小10M,超过则启动自动回收 public int max = 10 * 1024 * 1024; @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) public BitmapCache(){ cache = new LruCache<String,Bitmap>(max){ @Override //缓存图片的大小 protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) @Override public Bitmap getBitmap(String s) { return cache.get(s); } @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) @Override public void putBitmap(String s, Bitmap bitmap) { cache.put(s,bitmap); }}
运行结果:
在网络不佳的时候,显示图片显示默认设置的图片
5.实例三:使用ImageCache、LruCache、ImageLoader、NetworkImageView实现网络图片加载(单独使用ImageCache是起不到缓存效果的)
修改上例中的activity_main.xml
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <com.android.volley.toolbox.NetworkImageView android:id="@+id/iv_netImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp"/></LinearLayout>
修改MainActivity.java
MainActivity.java
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ImageView;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.NetworkImageView;public class MainActivity extends AppCompatActivity { private ImageView imageView; private NetworkImageView networkImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); String url = "http://imgsrc.baidu.com/forum/w=580/sign=b6a55730c81b9d168ac79a69c3dfb4eb/b168d5c451da81cbf9b846225466d0160824318d.jpg"; ImageLoader loader = new ImageLoader(MyApplication.getHttpQueue(), new BitmapCache()); networkImageView.setDefaultImageResId(R.mipmap.ic_launcher); networkImageView.setErrorImageResId(R.mipmap.ic_launcher); networkImageView.setImageUrl(url,loader); } private void initView(){ networkImageView = (NetworkImageView) findViewById(R.id.iv_netImage); }}
运行结果:
0 0
- Volley加载图片的介绍及用法
- Volley的基本用法 使用Volley加载网络图片
- volley之image-loader的使用及图片加载
- volley加载图片 及imageloader使用
- Volley的介绍和用法
- 原生代码加载网络图片和Volley和Picasso的简单介绍和优缺点对比
- 利用Volley对图片的加载
- Volley加载图片的三种方式
- Volley 的简单学习之加载图片
- Volley的图片加载三种方法
- Android Volley使用介绍(二),加载网络图片
- Android Volley使用介绍(一),Volley的基本用法
- Android下Animation动画的使用 及 Volley加载图片动画实现
- Volley加载图片
- Volley加载圆形图片
- Volley加载图片
- Volley 加载图片
- Volley加载网络图片
- HDU:1257 最少拦截系统(贪心+动态规划DP||LIS?)
- android 仿PathButton控件
- 大杂烩随手记(样式,jq)
- Java中常见的RunTime异常及异常详解
- Yii2片段缓存详解
- Volley加载图片的介绍及用法
- 数据结构实验之查找一:二叉排序树
- unrecognized selector sent to instance出现的原因和解决方案
- Emoji 表情在Java代码中处理api
- HDU 1501(Wooden Sticks LIS)
- LeetCode:382 Linked List Random Node
- Dapper 连表查询
- Unity怎么自适应分辨率,一段段给你解释
- 类型转换