• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 初涉RxAndroid结合Glide实现多图片加载操作

初涉RxAndroid结合Glide实现多图片加载操作

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了rxandroid,rxandroid使用,android rxandroid,rxandroid是什么,rxjava rxandroid等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

初涉RxAndroid结合Glide实现多图片加载操作


什么是RxJava或者RxAndroid我就不多废话了,理论知识一大堆人给我们做好了,只要自己肯去看就能理解,我这里直接给出传送门:https://github.com/lzyzsd/Awesome-RxJava(很丰富,看完就基本有概念了)


那么问题来了,人家都解释完了我干嘛?实操个简单的例子吧,正好上周讲了篇Glide的那么这次就实践下

效果图:

这里写图片描述

我们点开App然后就是一个RecycleView里面有一堆图然后还有文字,文字是本地的,图是网上下的,逻辑流程很简单,来说一下怎么实现的然后引出主角。

包结构:

这里写图片描述

GlideModuleConfig配置Glide
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) { } }

这里做一些配置工作,具体干什么可以看注释

TestOBJ用于给RecycleView引用图片地址和文字内容

public class TestOBJ {
    public String imageUrl;
    public String content;
}

翔哥那个类不解释了,可以自己去搜搜百度第一条就是,我们再来看看适配器

DataAdapter(重要步骤的解释也在注释里了)

public class DataAdapter extends RecyclerView.Adapter {
    Context context;
    List testOBJs;

    public DataAdapter(Context context) {
        this.context = context;
    }

    //获取布局
    @Override
    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的加载图片填充数据
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        DataViewHolder dataViewHolder = (DataViewHolder) holder;
        TestOBJ obj = testOBJs.get(position);
//先获取上下文对象,再加载具体的URL然后填充到控件里去
        Glide.with(holder.itemView.getContext()).load(obj.imageUrl).into(dataViewHolder.imageIV);
        dataViewHolder.contentTV.setText(obj.content);
    }

    @Override
    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 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 testOBJs) {
            testOBJs.size();
            LogUtils.d("--->onNext  testOBJs.size() " + testOBJs.size());
            //刷新数据
            dataAdapter.updateData(testOBJs);
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
        logic();
        setSupportActionBar(toolBar);
        StatusBarCompat.compat(this, getResources().getColor(R.color.status_bar_color));
        StatusBarCompat.compat(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());
        return list;
    }

    @Override
    protected void onPause() {
        super.onPause();
        //清除请求
        Glide.clear(recycleView);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        LogUtils.d("--->onDestroy");
        //必须主线程使用
        Glide.get(this).clearMemory();
        //Glide.get(this).clearDiskCache(); 非主线程
    }
}

解释:
我们定义了一个观察者和一个被观察者然后自从




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • GreenDao与ReactiveX的完美搭配,greendaoreactivex
  • 【转载】ReactiveX 的理念和特点,转载reactivex理念
  • 初涉RxAndroid结合Glide实现多图片加载操作
  • Android开发学习之路--RxAndroid之初体验
  • Android开发学习之路--RxAndroid之lambda

相关文章

  • 2017-05-26编译android源码4---ubuntu下载Android源代码
  • 2017-05-26Android 学习1----控件的学习,android1----
  • 2017-05-26oracle 代码报错大全分析
  • 2017-05-26手动获取判断处理权限,获取判断权限
  • 2017-05-26初识react native遇到的问题,reactnative
  • 2017-05-26For each循环中使用remove方法。,eachremove
  • 2017-05-26【RecyclerView与Glide】实现一个Android电子书阅读APP,gliderecyclerview
  • 2017-05-26Android_事件纷发
  • 2017-05-26Android零散,零散钟点工
  • 2017-05-26【原创】Android ExpandableListView使用,expandablelistview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android studio图片ERROR: 9-patch image xx .9.png malformed
    • 基于PGPool的1主2从PostgreSQL流复制HA的搭建
    • 新版mysql搭建多线程主从复制
    • RadioButton与CheckBox,radiobutton
    • React Native,reactnative
    • achartengine/MPAndroidChart——图表实现之Java
    • greendao3.2.3配置时遇到的问题,greendao3.2.3遇到
    • 自定义控件详解(二):Path类 相关用法,详解path
    • 安卓第十六天笔记-音频与视频播放,安卓第视频播放
    • Android 旋转屏幕--处理Activity与AsyncTask的最佳解决方案,androidasynctask

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有