Android中ImageLoader的使用
来源:互联网 发布:json查看 编辑:程序博客网 时间:2024/03/29 18:55
ImageLoader是用来加载多个网络图片的,这次我们实现的是把网络图片加载到ListView中。
首先我们把Volley.jar包添加到Android Studio中的libs目录中,然后刷新一下。
activity_main中只有一个ListView
一、MainActivity:
package com.example.administrator.imageloader;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;import com.example.administrator.imageloader.adapter.ImageAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private ListView lv; private List<String>urls; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { lv = (ListView) findViewById(R.id.lv); urls = new ArrayList<>(); initList(); ImageAdapter adapter = new ImageAdapter(urls,this); lv.setAdapter(adapter); } private void initList() { urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img2.imgtn.bdimg.com/it/u=1942812496,2337888220&fm=21&gp=0.jpg"); urls.add("http://img5.imgtn.bdimg.com/it/u=1755111051,4257519768&fm=21&gp=0.jpg"); urls.add("http://img5.imgtn.bdimg.com/it/u=921123054,1714480967&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); urls.add("http://img0.imgtn.bdimg.com/it/u=4087866388,590061000&fm=21&gp=0.jpg"); }}二、单例设计模式的类:
package com.example.administrator.imageloader;import android.content.Context;import android.graphics.Bitmap;import android.util.LruCache;import com.android.volley.RequestQueue;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.Volley;/** * 单例设计模式 * Created by 匡效国 on 15-11-3. */public class NetworkSingleTon { private static ImageLoader imageLoader; private static RequestQueue requestQueue; private Context context; private static NetworkSingleTon singleInstance; //公有的创造方法 public static NetworkSingleTon createNetworkSingleTon(Context context) { if (singleInstance == null) { singleInstance = new NetworkSingleTon(context); } return singleInstance; } private NetworkSingleTon(Context context) { //在私有的构造函数中实例化requestQueue和imageLoader requestQueue = Volley.newRequestQueue(context); imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { int maxSize = (int) (Runtime.getRuntime().maxMemory() / 8); private LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap value) { int ret = value.getRowBytes() * value.getHeight(); return ret; } }; @Override public Bitmap getBitmap(String url) { return lruCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { lruCache.put(url, bitmap); } }); } public static RequestQueue getRequestQueue() { return requestQueue; } public static ImageLoader getImageLoader() { return imageLoader; }}三、创建一个Application的子类,实例化单例模式类:
package com.example.administrator.imageloader;import android.app.Application;/** * Created by Administrator on 15-11-3. */public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //getApplicationContext()获取Application的上下文 //将NetworkSingleTon实例化 NetworkSingleTon.createNetworkSingleTon(getApplicationContext()); }}四、在清单文件中声明:
<application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">五、创建适配器:
package com.example.administrator.imageloader.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import com.android.volley.RequestQueue;import com.android.volley.VolleyError;import com.android.volley.toolbox.ImageLoader;import com.example.administrator.imageloader.NetworkSingleTon;import java.util.List;/** * Created by Administrator on 15-11-3. */public class ImageAdapter extends BaseAdapter { private List<String> list; private Context context; private ImageLoader imageLoader; private RequestQueue requestQueue; public ImageAdapter(List<String> list, final Context context) { this.list = list; this.context = context; //调用NetworkSingleTon类的静态方法得到requestQueue和imageLoader requestQueue = NetworkSingleTon.getRequestQueue(); imageLoader = NetworkSingleTon.getImageLoader(); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = null; if (convertView != null) { imageView = (ImageView) convertView; } else { imageView = new ImageView(context); } String url = list.get(position); final ImageView finalImageView = imageView; //获取回调函数中返回的Bitmap并设置给ImageView imageLoader.get(url, new ImageLoader.ImageListener() { @Override public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) { finalImageView.setImageBitmap(imageContainer.getBitmap()); } @Override public void onErrorResponse(VolleyError volleyError) { } }); return finalImageView; }}运行结果:
0 0
- Android中ImageLoader的使用
- // android imageloader 的使用
- Android中ImageLoader的用法
- Android中图片处理库Universal-ImageLoader的基本使用
- Android中使用ImageLoader加载图片
- 【Android 基础】ListView中使用ImageLoader
- 【Android 基础】GridView中使用ImageLoader
- 【Android 基础】ViewPager中使用ImageLoader
- Android第三方开源ImageLoader的使用(一)
- Android ImageLoader的使用--超简单明了
- Android中ImageLoader
- Android中ImageLoader的使用,下载图片绑定到listview上
- ImageLoader的使用
- ImageLoader的使用
- 开源库ImageLoader的使用
- ImageLoader的基本使用
- ImageLoader的使用
- ImageLoader的使用
- 算数-分数和小数
- Eclipse设置字体大小
- 使用Java爬虫得到CSDN博客信息并保存(一)
- python与数据库
- Python easy_install安装插件错误(UnicodeDecodeError)解决办法
- Android中ImageLoader的使用
- MySQL Fabric 实践
- 设计模式之抽象工厂模式
- Apache Kafka 分布式消息队列中间件安装与配置
- js中的一些消息提示框
- 视差特效
- 分享一个超棒的动画延迟载入轮播图插件
- table隔行变色
- PHP配置文件 php.ini 选项说明