初涉RxAndroid结合Glide实现多图片加载操作
什么是RxJava或者RxAndroid我就不多废话了,理论知识一大堆人给我们做好了,只要自己肯去看就能理解,我这里直接给出传送门:https://github.com/lzyzsd/Awesome-RxJava(很丰富,看完就基本有概念了)
那么问题来了,人家都解释完了我干嘛?实操个简单的例子吧,正好上周讲了篇Glide的那么这次就实践下
效果图:
我们点开App然后就是一个RecycleView里面有一堆图然后还有文字,文字是本地的,图是网上下的,逻辑流程很简单,来说一下怎么实现的然后引出主角。
包结构:
GlideModuleConfig配置Glide 这里做一些配置工作,具体干什么可以看注释 TestOBJ用于给RecycleView引用图片地址和文字内容 翔哥那个类不解释了,可以自己去搜搜百度第一条就是,我们再来看看适配器 DataAdapter(重要步骤的解释也在注释里了) 数据层已经OK了,我们来看看业务层 解释:
StatusBarCompat<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPrPBvf7KvbLLtaXAuMq1z9ajqM/ouOfEx7/bwLS1xKOs1eK49sbkyrW/ydPQv8nO3tb30qrErMjPtcTR1cmrzKuz86OpPGJyIC8+DQo8c3Ryb25nPlRlc3RPQko8L3N0cm9uZz7Ss8PmttTP87XEyvTQ1MSj0M2jqMTj0rK/ydLUsrvTw6OsuPbIy8+wud+jqTxiciAvPg0KyLu6877NysfStc7xyrXP1rXETWFpbkFjdGl2aXR5us3KysXkxvdEYXRhQWRhcHRlcsHLPC9wPg0KPHA+ztLDx9K7uPbSu7j2wOC/tM/IysdHbGlkZU1vZHVsZUNvbmZpZzwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
/**
* Created by jiajiewang on 16/3/25.
*/
public class GlideModuleConfig implements GlideModule {
//在这里创建设置内容,之前文章所提及的图片质量就可以在这里设置
//还可以设置缓存池参数什么的
@Override
public void applyOptions(Context context, GlideBuilder builder) {
//设置了默认图片格式
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
//设置了缓存的位置
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context,"MY_CACHE_LOCATION", 100*1024*1024));
}
//在这里注册ModelLoaders
@Override
public void registerComponents(Context context, Glide glide) {
}
}
public class TestOBJ {
public String imageUrl;
public String content;
}
public class DataAdapter extends RecyclerView.Adapter {
Context context;
List
public class MainActivity extends AppCompatActivity {
Toolbar toolBar;
RecyclerView recycleView;
DataAdapter dataAdapter;
//URL数据源
String data[] = {"http://hiphotos.baidu.com/zhixin/abpic/item/4651a712c8fcc3cea97dbce49045d688d53f206c.jpg"
, "http://pic.5442.com/2014/0930/06/5442.jpg",
"http://img5q.duitang.com/uploads/item/201410/22/20141022214043_5EEKH.thumb.224_0.jpeg",
"http://img5.duitang.com/uploads/item/201512/08/20151208163159_HGEM2.thumb.224_0.png",
"http://img4.duitang.com/uploads/item/201510/29/20151029224537_ijEKF.thumb.224_0.jpeg",
"http://img5.imgtn.bdimg.com/it/u=1230273521,1023320328&fm=21&gp=0.jpg"
};
//被观察者
Observable observable = Observable.create(new Observable.OnSubscribe
>() {
@Override
public void call(Subscriber> subscriber) {
subscriber.onNext(makeData());
subscriber.onCompleted();
}
});
//观察者
Observer
> observer = new Observer
>() {
@Override
public void onCompleted() {
LogUtils.d("--->onCompleted");
}
@Override
public void onError(Throwable e) {
Toast.makeText(MainActivity.this, "加载失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onNext(List
我们定义了一个观察者和一个被观察者然后自从