前言

1. 代码如下:

/**

* Email: 2185134304@qq.com

* Created by Novate 2018/6/23 12:11

* Version 1.0

* Params:

* Description:

*/

public class MainActivity1 extends AppCompatActivity {

private ImageView iv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

iv = (ImageView) findViewById(R.id.iv);

// 需求:给网络上的一张图片添加水印,显示到 ImageView 控件上

// 1. 开启线程下载图片;

// 2. 添加水印;

// 3. 切换到主线程显示图片;

Observable.just("http://img.taopic.com/uploads/allimg/130331/240460-13033106243430.jpg")

.map(new Function() { // 事件变换:把 String - Bitmap

@Override

public Bitmap apply(@NonNull String urlPath) throws Exception {

URL url = new URL(urlPath);

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

InputStream inputStream = urlConnection.getInputStream();

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

return bitmap;

}

})

.map(new Function() { // 事件变换:把 Bitmap - Bitmap 添加水印

@Override

public Bitmap apply(@NonNull Bitmap bitmap) throws Exception {

bitmap = createWatermark(bitmap, "RxJava2.0");

return bitmap;

}

})

.subscribeOn(Schedulers.io()) // subscribeOn以上所有操作全部在子线程中执行

.observeOn(AndroidSchedulers.mainThread()) // observeOn以下操作全部在主线程中执行

.subscribe(new Consumer() {

@Override

public void accept(Bitmap bitmap) throws Exception {

iv.setImageBitmap(bitmap);

}

});

}

private Bitmap createWatermark(Bitmap bitmap, String mark) {

int w = bitmap.getWidth();

int h = bitmap.getHeight();

Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bmp);

Paint p = new Paint();

// 水印颜色

p.setColor(Color.parseColor("#C5FF0000"));

// 水印字体大小

p.setTextSize(150);

//抗锯齿

p.setAntiAlias(true);

//绘制图像

canvas.drawBitmap(bitmap, 0, 0, p);

//绘制文字

canvas.drawText(mark, 0, h / 2, p);

canvas.save(Canvas.ALL_SAVE_FLAG);

canvas.restore();

return bmp;

}

}

分析以上代码可知:

1>:首先 用 map操作符:把 String类型url转为 Bitmap;

2>:然后 用 map操作符:把 Bitmap类型 转为 Bitmap;

3>:用 subscribeOn(Schedulers.io()) :表示 subscribeOn(Schedulers.io()) 以上操作全部执行在子线程中;

4>:用 observeOn(AndroidSchedulers.mainThread()):表示 observeOn(AndroidSchedulers.mainThread()) 以下操作切换到 主线程,全部在主线程中执行;

5>:用 subscribe(new Consumer(){}:显示图片即可;

2. RxJava特点

1>:优点:一条链子下来的,可读性比较高、扩展性、维护性;

2>:缺点:学习成本高,思想难以转换(基于事件流的思想)

java的写法作文,RxJava系列文章(二) - 网络图片添加水印RxJava写法相关推荐

  1. .net 面试题系列文章二(附答案)

    .net 面试题系列文章二(附答案) 内容摘要:本文是.net 面试题系列的第二篇,该系列文章是对网上所有.net面试题的收重新集整理後的系列文章,囊括了c#面试题,vb.net面试题,asp.net ...

  2. 强化学习系列文章(二十七):VPG+Beta分布在CartPoleContinuous环境中的应用

    强化学习系列文章(二十七):VPG+Beta分布在CartPoleContinuous环境中的应用 在第七篇笔记(https://blog.csdn.net/hhy_csdn/article/deta ...

  3. 强化学习系列文章(二十三):AirSim Python API图像与图像处理

    强化学习系列文章(二十三):AirSim Python API图像与图像处理 参考网址:https://microsoft.github.io/AirSim/image_apis/#segmentat ...

  4. 强化学习系列文章(二十八):进化强化学习EvoRL的预实验

    强化学习系列文章(二十八):进化强化学习EvoRL的预实验 最近在研究强化学习解决离散空间的组合优化问题时,接触到了很多进化算法,实际体验也是与RL算法不相上下.进化算法也常用于优化神经网络的参数,C ...

  5. Java游戏服务端开发系列文章

    已经好久没有更新自己的学习状态.或许是工作太忙吧,生活被工作羁绊,无法抽身.最近因为某些事情的原因,工作上有点充裕的时间来分享自己的一点小小经验.因为毕竟我也是一个混迹职场几年了 虽然天资不咋地,但是 ...

  6. webrtc实现视频群聊系列文章(二)实现网络中一对一视频聊天

    引言 在之前一篇文章写了webrtc实现基本的本地1对1视频通讯,这一篇文章则实现现实网络中一对一视频聊天. 目标 思考 webrtc实现点对点通信的基础是目标和自己之间能够建立网络链接,那么如何建立 ...

  7. SOA系列文章(二):服务设计原理:服务模式和反模式

    服务设计系列的法则已经发展到最佳通信实践和取样相关编码的程度.本文提供了设计和实现网络服务的基本原理,并且对面向服务的体系结构(SOA)的相关概念做了一个简要的回顾,以及有关于几种模式和反模式的详细讨 ...

  8. kotlin java 效率_Java与Kotlin系列文章之性能问题详解

    作者丨Jakub Anio a 译者丨姜雨生 策划丨田晓旭 随着对 Kotlin 越来越深入的了解,我发现市面上关于 Kotlin 方面,比较深入的资料几乎是 0,所以我决定,将 Kotlin 各个方 ...

  9. 数据库发展与PostgreSQL生态系列文章二

    作者:魏波,中国PG分会培训认证执行总监.资深数据库工程师,十多年的数据库运维管理及培训经验,掌握PostgreSQL架构部署.性能优化等,致力于推动PostgreSQL在中国的发展. 数据库发展概要 ...

最新文章

  1. 1021 Deepest Root
  2. 2021年必读的10 个计算机视觉论文总结
  3. 推荐NHibernate新书:NHibernate 3.0 CookBook[附下载]
  4. 任意次序的n个烙饼最小反转次数求解 暑期学习笔记(十)
  5. Windows XP环境下Apache2.2.21和Tomcat7.0.26下的整合
  6. C++类class和结构体struct区别
  7. 生活优越与生活艰苦者之间的思考
  8. javascript-Global与Math对象
  9. GSON 循环引用的对象转为 JSON 造成栈溢出
  10. linux循环脚本while循环,Shell脚本while、until循环语句简明教程
  11. unittest Module中的常用6种断言方法
  12. linux 系统让服务后台运行
  13. SQL Server Management Studio –分步安装指南
  14. 5G浪潮推动 射频产业风起云涌
  15. underscorejs之_.filter(list, predicate, [context])
  16. SNMP报文抓取与分析(二)
  17. android实现微信付款功能,Android实现微信支付功能详解
  18. 计算机创新创业计划2000字,创新创业论文2000字
  19. python 小说 云_python爬小说
  20. 拼购造富,苏宁引领“电商扶贫”

热门文章

  1. 远程安装CentOS
  2. Cisco1721的简单配置
  3. .NET常见错误大全
  4. PHP网站开发有哪些框架,罗列几款时下高人气的PHP开发框架
  5. mysql注释符号_MySQL基础知识(2021最新版教程)
  6. Fiddler改包场景2——拦截请求,修改响应,放行请求
  7. 计算机新增桌面的路径,自动更改Windows新建用户桌面文件默认路径修改
  8. 剑指offer面试题[6]-重建二叉树
  9. 机器学习实战——AdaBoost
  10. linux中_Linux基础知识(Linux系统、Linux中的链表)