Android开发机器人用什么语言Glide用过的人多吗

今天看啥 热点:
初涉RxAndroid结合Glide实现多图片加载操作
什么是RxJava或者RxAndroid我就不多废话了,理论知识一大堆人给我们做好了,只要自己肯去看就能理解,我这里直接给出传送门:/lzyzsd/Awesome-RxJava(很丰富,看完就基本有概念了)
那么问题来了,人家都解释完了我干嘛?实操个简单的例子吧,正好上周讲了篇Glide的那么这次就实践下
我们点开App然后就是一个RecycleView里面有一堆图然后还有文字,文字是本地的,图是网上下的,逻辑流程很简单,来说一下怎么实现的然后引出主角。
GlideModuleConfig配置Glide
StatusBarCompatvc3Ryb25nPrPBvf7KvbLLtaXAuMq1z9ajqM/ouOfEx7/bwLS1xKOs1eK49sbkyrW/ydPQv8nO3tb30qrErMjPtcTR1cmrzKuz86OpPGJyIC8+DQo8c3Ryb25nPlRlc3RPQko8L3N0cm9uZz7Ss8PmttTP87XEyvTQ1MSj0M2jqMTj0rK/ydLUsrvTw6OsuPbIy8+wud+jqTxiciAvPg0KyLu6877NysfStc7xyrXP1rXETWFpbkFjdGl2aXR5us3KysXkxvdEYXRhQWRhcHRlcsHLPC9wPg0KPHA+ztLDx9K7uPbSu7j2wOC/tM/IysdHbGlkZU1vZHVsZUNvbmZpZzwvcD4NCjxwcmUgY2xhc3M9"brush:">
* Created by jiajiewang on 16/3/25.
public class GlideModuleConfig implements GlideModule {
//在这里创建设置内容,之前文章所提及的图片质量就可以在这里设置
//还可以设置缓存池参数什么的
public void applyOptions(Context context, GlideBuilder builder) {
//设置了默认图片格式
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
//设置了缓存的位置
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context,&MY_CACHE_LOCATION&, 100*));
//在这里注册ModelLoaders
public void registerComponents(Context context, Glide glide) {
这里做一些配置工作,具体干什么可以看注释
TestOBJ用于给RecycleView引用图片地址和文字内容
public class TestOBJ {
public String imageU
翔哥那个类不解释了,可以自己去搜搜百度第一条就是,我们再来看看适配器
DataAdapter(重要步骤的解释也在注释里了)
public class DataAdapter extends RecyclerView.Adapter {
List testOBJs;
public DataAdapter(Context context) {
this.context =
//获取布局
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new DataViewHolder(view);
//具体item的加载图片填充数据
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
DataViewHolder dataViewHolder = (DataViewHolder)
TestOBJ obj = testOBJs.get(position);
//先获取上下文对象,再加载具体的URL然后填充到控件里去
Glide.with(holder.itemView.getContext()).load(obj.imageUrl).into(dataViewHolder.imageIV);
dataViewHolder.contentTV.setText(obj.content);
public int getItemCount() {
return testOBJs == null ? 0 : testOBJs.size();
//控件对象Holder
static class DataViewHolder extends RecyclerView.ViewHolder {
ImageView imageIV;
TextView contentTV;
public DataViewHolder(View itemView) {
super(itemView);
imageIV = (ImageView) itemView.findViewById(R.id.imageIV);
contentTV = (TextView) itemView.findViewById(R.id.contentTV);
//刷新数据用
public void updateData(List testOBJs) {
this.testOBJs = testOBJs;
notifyDataSetChanged();
数据层已经OK了,我们来看看业务层
public class MainActivity extends AppCompatActivity {
Toolbar toolB
RecyclerView recycleV
DataAdapter dataA
//URL数据源
String data[] = {&/zhixin/abpic/item/fcc3cea97dbcef206c.jpg&
, &//5442.jpg&,
&/uploads/item//43_5EEKH.thumb.224_0.jpeg&,
&/uploads/item//59_HGEM2.thumb.224_0.png&,
&/uploads/item//37_ijEKF.thumb.224_0.jpeg&,
&http://img5./it/u=,&fm=21&gp=0.jpg&
//被观察者
Observable observable = Observable.create(new Observable.OnSubscribe<list&() {
public void call(Subscriber& subscriber) {
subscriber.onNext(makeData());
subscriber.onCompleted();
Observer<list& observer = new Observer<list&() {
public void onCompleted() {
LogUtils.d(&---&onCompleted&);
public void onError(Throwable e) {
Toast.makeText(MainActivity.this, &加载失败&, Toast.LENGTH_SHORT).show();
public void onNext(List testOBJs) {
testOBJs.size();
LogUtils.d(&---&onNext
testOBJs.size() & + testOBJs.size());
//刷新数据
dataAdapter.updateData(testOBJs);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar(toolBar);
pat(this, getResources().getColor(R.color.status_bar_color));
pat(this);
private void init() {
LogUtils.d(&---&init&);
toolBar = (Toolbar) findViewById(R.id.toolBar);
recycleView = (RecyclerView) findViewById(R.id.recycleView);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
private void logic() {
LogUtils.d(&---&logic&);
dataAdapter = new DataAdapter(MainActivity.this);
recycleView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
recycleView.setAdapter(dataAdapter);
LogUtils.d(&---&Glide.getPhotoCacheDir & + Glide.getPhotoCacheDir(MainActivity.this, &MY_CACHE_LOCATION&));
//制造数据
private List makeData() {
List list = new ArrayList&&();
TestOBJ testOBJ;
for (int k = 0; k & 5; k++) {
testOBJ = new TestOBJ();
testOBJ.content = &标题啊,你服不服 & + k + & 个 &;
testOBJ.imageUrl = data[k];
list.add(testOBJ);
LogUtils.d(&---&list的长度等于 & + list.size());
protected void onPause() {
super.onPause();
//清除请求
Glide.clear(recycleView);
protected void onDestroy() {
super.onDestroy();
LogUtils.d(&---&onDestroy&);
//必须主线程使用
Glide.get(this).clearMemory();
//Glide.get(this).clearDiskCache(); 非主线程
</list</list</list
我们定义了一个观察者和一个被观察者然后自从
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
注册的行为开始后,只咬被观察者一有风吹草动,观察者的相关回调就会被触发,我们来看下Log的打印顺序
还是在一堆的Activity生命周期里先跑在我们数据摸你的过程中看了可能我们Glide缓存的目录,跟我们的预设一致,接着就执行了 onNext再是onCompleted,因为没出什么意外也就没刷出onError
/data/user/0/sample.wjj.rxandroidglidedemo/cache/MY_CACHE_LOCATION
暂无相关文章
相关搜索:
相关阅读:
相关频道:
Android教程最近更新【android开发】 glide 缓存清理? - 知乎13被浏览11792分享邀请回答63 条评论分享收藏感谢收起01 条评论分享收藏感谢收起查看更多回答Hi,欢迎来到华清远见移动互联网学院官网!国内王牌JAVAEE培训、Android培训、HTML5培训、UI培训、JAVA培训、VR培训机构!
400-611-6270
您当前的位置: >
> Android glide框架怎么使用?
Android glide框架怎么使用?
时间: 13:37 来源:Android开发学习网
今天我们来讲解下android glide框架的使用,Android Glide是Android开发中常用的一种图片加载框架。在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app,今天我们就来讲解下Android Glide框架的具体用法。
1.GlideModule配置参数
package com.cary.
import android.content.C
import com.bumptech.glide.G
import com.bumptech.glide.GlideB
import com.bumptech.glide.load.DecodeF
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapP
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheF
import com.bumptech.glide.load.engine.cache.LruResourceC
import com.bumptech.glide.load.engine.cache.MemorySizeC
import com.bumptech.glide.module.GlideM
* Glide参数配置
public class GlideConfig implements GlideModule {
private final int diskSize = 1024 * 1024 * 100;
private final int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8; // 取1/8最大内存作为最大缓存
public void applyOptions(Context context, GlideBuilder builder) {
// 定义缓存大小和位置
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskSize)); //内存中
// 默认内存和图片池大小
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize(); // 默认内存大小
int defaultBitmapPoolSize = calculator.getBitmapPoolSize(); // 默认图片池大小
builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize)); // defaultMemoryCacheSizes默认的
builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize));
// 自定义内存和图片池大小
builder.setMemoryCache(new LruResourceCache(memorySize));
builder.setBitmapPool(new LruBitmapPool(memorySize));
// 定义图片格式
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
builder.setDecodeFormat(DecodeFormat.PREFER_RGB_565); // 默认
public void registerComponents(Context context, Glide glide) {
配置androidManifestxml
android:name=&com.cary.okhttp.GlideConfig&
android:value=&GlideModule&/&
配置proguard-rules.pro
-keepnames class * com.example.jianglei.glidedemo.GlideModelConfig
Glide允许一个应用当中存在多个GlideModules,但是Glide并不会按照一个特殊的顺序去调用已注册的GlideModules,如果一个应用的多个依赖工程当中有多个相同的Modules,就有可能会产生冲突。
如果一个冲突是不可避免的,应用应该默认去定义一个自己的Module,用来手动地处理这个冲突,在进行Manifest合并的时候,可以用下面的标签排除冲突的Module:
2.GlideUtils
package com.cary.
import android.content.C
import android.widget.ImageV
import com.bumptech.glide.G
import com.bumptech.glide.P
import com.bumptech.glide.load.engine.DiskCacheS
* Created by xi on .
public class GlideUtil {
* 异步网络图片加载
* @param context
* @param url
* @param imageView
public static void loadNetImg(Context context, String url,ImageView imageView){
///uploads/source/glidepicasso/cover.jpg
Glide.with(context)
.load(url)
.into(imageView);
* 异步网络图片加载并设置图片显示大小
* @param context
* @param url
* @param imageView
* @param width
* @param height
public static void loadImgWithSize(Context context, String url,ImageView imageView, int width, int height){
Glide.with(context).load(url).override(width, height).into(imageView);
* 异步网络加载图片,失败加载默认图片
* @param context
* @param url
* @param imageView
public static void loadImgWithError(Context context, String url,ImageView imageView){
Glide.with(context)
.load(url)
.placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);
* 网络图片加载动画
* @param context
* @param url
* @param imageView
* @param animId
public static void loadImgWithAnimate(Context context, String url,ImageView imageView, int animId){
Glide.with(context).load(url).animate(animId).into(imageView);
* 图片加载完成后回掉
* 支持缩略图,先加载缩略图 然后在加载全图
* @param context
* @param url
* @param imageView
public static void loadGifWihtThumbnail(Context context, String url,ImageView imageView){
Glide.with(context).load(url).thumbnail(0.1f).into(imageView); //传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。
* 显示gif静态图
* @param context
* @param url
* @param imageView
public static void loadAsBitmap(Context context, String url,ImageView imageView) {
Glide.with(context).load(url).asBitmap().into(imageView);
* 显示gif动态图
* @param context
* @param url
* @param imageView
public static void loadAsGif(Context context, String url,ImageView imageView) {
Glide.with(context).load(url).asGif().into(imageView);
* 设置磁盘缓存
* @param context
* @param url
* @param imageView
public static void loadWithDiskCache(Context context, String url,ImageView imageView){
//缓存参数
//ALL:缓存源资源和转换后的资源(即所有版本,默认行为)
//NONE:不作任何磁盘缓存。然而,默认的它将仍然使用内存缓存!
//SOURCE:仅缓存源资源(原来的全分辨率的图像)。
//在我们上面略缩图的例子中,将会只有一个 像素的图片
//RESULT:缓存转换后的资源(最终的图像,即降低分辨率后的(或者是转换后的)
Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
* 跳过内存缓存
* @param context
* @param url
* @param imageView
public static void loadWithSkipMemoryCache(Context context, String url,ImageView imageView){
//设置跳过内存缓存
//这意味着 Glide 将不会把这张图片放到内存缓存中去
//这里需要明白的是,这只是会影响内存缓存!Glide 将会仍然利用磁盘缓存来避免重复的网络请求。
Glide.with(context)
.load(url)
.skipMemoryCache(true)
.into(imageView);
* 设置加载优先级
* @param context
* @param url
* @param imageView
public static void loadByPriority(Context context, String url,ImageView imageView){
Glide.with(context).load(url).priority(Priority.NORMAL).into(imageView);
* 清理内存缓存 可以在UI主线程中进行
* @param context
public static void clearMemoryCache(Context context){
Glide.get(context).clearMemory();
* 绑定生命周期:如果绑定对象生命周期结束,那么等待中的加载请求会被取消
* .with(Context context)// 绑定Context
.with(Activity activity);// 绑定Activity
.with(FragmentActivity activity);// 绑定FragmentActivity
.with(Fragment fragment);// 绑定Fragment
以上就是关于android glide框架使用的内容,更多Android开发技术分享请持续关注我们。
主讲人:Xena|共238人观看
主讲人:Scorpio|共5501人观看
主讲人:Wing|共121人观看用户名:吴雨声
文章数:188
评论数:196
访问量:103037
注册日期:
阅读量:1297
阅读量:3317
阅读量:455604
阅读量:1140218
51CTO推荐博文
&&&&这次还要讲讲,因为ImageLoader比较强大,强大后就会骄傲,骄傲后就会出问题,所以就给了Glide机会,现在用Glide的还是很多的,不会出现一些未知的问题,OOM什么的,搞定的BUG,代码已经封装好了,下面提供是那种用法:&&&&1.圆角GlideUtil.display(context,&viewHolder.iv_simpletagimageview,&ratings.getFood_image(),&GlideOptionsFactory.get(GlideOptionsFactory.Type.RADIUS));&&&&2.自定义缓存图片GlideOptions&glideOptions&=&new&GlideOptions(R.drawable.pic_head,&R.drawable.pic_head,&300);
GlideUtil.display(MineActivity.this,&pic_head,&result.getResult().getUser_face_image(),&glideOptions);&&&&3.DefaultGlideUtil.display(convertView.getContext(),&holder.image,&item.getCookbook_image());&&&&效果如下图:&&&&&&&&地址:/data/2241413本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 人类开发利用海洋 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信