ImageLoader框架使用
2017-01-04 23:34
267 查看
1、imageLoader以前是一个很火的图片框架,现在已经比较少人使用了。imageLoader有以下优点:
(1).使用多线程加载图片
(2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等;
(3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
(4).采用监听器监听图片加载过程及相应事件的处理;
(5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
官方下载:https://github.com/nostra13/Android-Universal-Image-Loader
这里使用介绍使用在listView、GridView、viewPager三种方式。
1、首先在build.gradle中添加下面代码,然后更新工程
2、新建一个MyApplication继承Application,并在AndroidManifest.xml中配置。
新建一个ImageLoaderListViewAdapter继承BaseAdapter然后实现它的方法。这里是使用ImageLoader,所以先在g构造方法中初始化它,
实现代码,跟上面差不多,不详细讲解,可看代码
(1).使用多线程加载图片
(2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等;
(3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
(4).采用监听器监听图片加载过程及相应事件的处理;
(5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
官方下载:https://github.com/nostra13/Android-Universal-Image-Loader
这里使用介绍使用在listView、GridView、viewPager三种方式。
1、首先在build.gradle中添加下面代码,然后更新工程
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
2、新建一个MyApplication继承Application,并在AndroidManifest.xml中配置。
package com.example.apple.imageloader; import android.app.Application; import android.content.Context; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.nostra13.universalimageloader.core.download.BaseImageDownloader; /** * Created by apple on 17/1/4. */ public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); initImageLoader(getApplicationContext()); } public static void initImageLoader(Context context) { //缓存文件的目录 // File cacheDir = StorageUtils.getOwnCacheDirectory(context, imageloader/Cache); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽 .threadPoolSize(3) //线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .diskCacheFileNameGenerator(new Md5FileNameGenerator()) //将保存的时候的URI名称用MD5 加密 .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值 .tasksProcessingOrder(QueueProcessingType.LIFO) // 由原先的discCache -> diskCache //.diskCache(new UnlimitedDiscCache(cacheDir))//自定义缓存路径 .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间 .writeDebugLogs() // Remove for release app .build(); //全局初始化此配置 ImageLoader.getInstance().init(config); } }3、在AndroidManifest.xml中添加用到的权限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.apple.imageloader"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ImageLoaderListViewActivity" /> <activity android:name=".ImageLoaderGridViewActivity" /> <activity android:name=".ImageLoaderViewPagerActivity"></activity> </application> </manifest>4、新建一个Constants类用于存放图片
package com.example.apple.imageloader; /** * Created by apple on 17/1/4. */ public class Constants { public static final String[] IMAGES = new String[]{ "http://himg.bdimg.com/sys/portrait/item/4690e59089e99490e4b89ae58aa10c24.jpg", "http://himg.bdimg.com/sys/portrait/item/4690e59089e99490e4b89ae58aa10c24.jpg", "http://himg.bdimg.com/sys/portrait/item/4690e59089e99490e4b89ae58aa10c24.jpg", "http://h.hiphotos.baidu.com/exp/w=480/sign=b5061aae6f224f4a5799721b39f59044/342ac65c10385343fc0feba99113b07ecb808871.jpg", "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg", "http://img5.mtime.cn/mg/2016/12/26/164311.99230575.jpg" }; }5、在listView中的使用,布局就一个listView
新建一个ImageLoaderListViewAdapter继承BaseAdapter然后实现它的方法。这里是使用ImageLoader,所以先在g构造方法中初始化它,
imageLoader = ImageLoader.getInstance();使用方法,其中第一个参数是图片,第二个是控件,第三个是options
imageLoader.displayImage(Constants.IMAGES[position],viewHolder.imageLoaders,options);使用DisplayImageOptions.Builder()创建DisplayImageOptions这个使用的时候拷过来就好。
// 使用DisplayImageOptions.Builder()创建DisplayImageOptions private DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .bitmapConfig(Bitmap.Config.RGB_565) .build(); // 构建完成完全代码
package com.example.apple.imageloader.adapter;在ImageLoaderListViewActivity中初始化使用adapter
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.apple.imageloader.Constants;
import com.example.apple.imageloader.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by apple on 17/1/4.
*/
public class ImageLoaderListViewAdapter extends BaseAdapter {
private Context mContext;
private ImageLoader imageLoader;
// 使用DisplayImageOptions.Builder()创建DisplayImageOptions private DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .bitmapConfig(Bitmap.Config.RGB_565) .build(); // 构建完成
public ImageLoaderListViewAdapter(Context context) {
mContext = context;
//初始化image
imageLoader = ImageLoader.getInstance();
}
@Override
public int getCount() {
return Constants.IMAGES.length;
}
@Override
public Object getItem(int position) {
return Constants.IMAGES[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//获取或创建viewHolder
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = View.inflate(mContext, R.layout.item_imageloader_listview, null);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//显示数据
viewHolder.tvImageLoader.setText("item"+(position+1));
imageLoader.displayImage(Constants.IMAGES[position],viewHolder.imageLoaders,options);
return convertView;
}
class ViewHolder {
@BindView(R.id.imageLoaders)
ImageView imageLoaders;
@BindView(R.id.tv_imageLoader)
TextView tvImageLoader;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
package com.example.apple.imageloader; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import com.example.apple.imageloader.adapter.ImageLoaderListViewAdapter; import butterknife.BindView; import butterknife.ButterKnife; public class ImageLoaderListViewActivity extends AppCompatActivity { @BindView(R.id.lv_imageLoader) ListView lvImageLoader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_loader_list_view); ButterKnife.bind(this); initData(); } private void initData() { ImageLoaderListViewAdapter imageLoaderListViewAdapter = new ImageLoaderListViewAdapter(this); lvImageLoader.setAdapter(imageLoaderListViewAdapter); } }6、在GridView中显示。
实现代码,跟上面差不多,不详细讲解,可看代码
package com.example.apple.imageloader.adapter;初始化使用
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import com.example.apple.imageloader.Constants;
import com.example.apple.imageloader.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by apple on 17/1/4.
*/
public class ImageLoaderGridviewAdapter extends BaseAdapter {
private Context mContext;
ImageLoader imageLoader;
// 使用DisplayImageOptions.Builder()创建DisplayImageOptions private DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .bitmapConfig(Bitmap.Config.RGB_565) .build(); // 构建完成
public ImageLoaderGridviewAdapter(Context context) {
mContext = context;
//单例ImageLoader类的初始化
imageLoader = ImageLoader.getInstance();
}
@Override
public int getCount() {
return Constants.IMAGES.length;
}
@Override
public Object getItem(int position) {
return Constants.IMAGES[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = View.inflate(mContext, R.layout.item_imageloader_gridview, null);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)convertView.getTag();
}
imageLoader.displayImage(Constants.IMAGES[position],viewHolder.image,options);
return convertView;
}
static class ViewHolder {
@BindView(R.id.image)
ImageView image;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
package com.example.apple.imageloader; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.GridView; import com.example.apple.imageloader.adapter.ImageLoaderGridviewAdapter; import butterknife.BindView; import butterknife.ButterKnife; public class ImageLoaderGridViewActivity extends AppCompatActivity { @BindView(R.id.gridView) GridView gridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_loader_grid_view); ButterKnife.bind(this); initView(); } private void initView() { ImageLoaderGridviewAdapter imageLoaderGridviewAdapter = new ImageLoaderGridviewAdapter(this); gridView.setAdapter(imageLoaderGridviewAdapter); } }7、在viewPager中使用
package com.example.apple.imageloader.adapter; import android.content.Context; import android.graphics.Bitmap; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.example.apple.imageloader.Constants; import com.example.apple.imageloader.R; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; /** * Created by apple on 17/1/4. */ public class ImageLoaderViewPagerAdapter extends PagerAdapter{ private Context mContext; private ImageLoader imageLoader; // 使用DisplayImageOptions.Builder()创建DisplayImageOptions private DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // 设置下载的图片是否缓存在SD卡中 .imageScaleType(ImageScaleType.EXACTLY)//设置图片解码类型 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .bitmapConfig(Bitmap.Config.RGB_565) .build(); // 构建完成 public ImageLoaderViewPagerAdapter(Context context) { mContext = context; //单例ImageLoader类的初始化 imageLoader = ImageLoader.getInstance(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager)container).removeView((View)object); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(mContext, R.layout.item_imageloader_viewpager,null); ImageView iv = (ImageView) view.findViewById(R.id.iv_image); imageLoader.displayImage(Constants.IMAGES[position],iv,options); ((ViewPager)container).addView(view,0); return view; } @Override public int getCount() { return Constants.IMAGES.length; } @Override public boolean isViewFromObject(View view, Object object) { return view.equals(object); } }
package com.example.apple.imageloader; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import com.example.apple.imageloader.adapter.ImageLoaderViewPagerAdapter; import butterknife.BindView; import butterknife.ButterKnife; public class ImageLoaderViewPagerActivity extends AppCompatActivity { @BindView(R.id.viewPager) ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_loader_view_pager); ButterKnife.bind(this); initData(); } private void initData() { ImageLoaderViewPagerAdapter imageLoaderViewPagerAdapter = new ImageLoaderViewPagerAdapter(this); viewPager.setAdapter(imageLoaderViewPagerAdapter); } }最后如果有什么不懂的可下载代码看:http://download.csdn.net/detail/u011324501/9729153
相关文章推荐
- 【光速使用开源框架系列】图片加载框架ImageLoader
- 使用Volley框架的ImageLoader加载网络图片
- 开源框架ImageLoader的使用
- Android 使用ImageLoader框架进行图片加载
- 使用Volley框架的ImageLoader加载网络图片
- 使用Volley框架的ImageLoader加载网络图片
- 使用Volley框架的ImageLoader加载大量网络图片的问题
- Android 主流网络图片加载缓存库框架Universal-ImageLoader的使用
- ImageLoader 图片请求框架的使用
- Android UI-开源框架ImageLoader完美使用+listview加载网络图片与下载
- 使用Volley框架中的ImageLoader来异步的加载图片
- 使用ImageLoader第三方框架,加载网络图片
- Android 开源框架Universal-ImageLoader的使用
- 开源框架Volley的使用《二》[NetWorkImageView&&LruCache&ImageLoader]
- Android高级之Volley框架(三):ImageRequest、ImageLoader、NewworkImageView的使用
- Android图片缓存的框架ImageLoader的使用
- 使用Volley框架的ImageLoader加载网络图片
- 关于android图片加载框架univser-imageloader使用的一些小技巧记录
- 图片加载框架简单介绍<一> ImageLoader 的基本使用
- android-----Volley框架使用ImageLoader加载图片源码分析