1、依赖
//依赖RxAndroid 2X 的依赖库
//增加Rxjava 2X的依赖库
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.7'
2、学习资料链接
3、附代码
private String PATH = "图片地址";
private ProgressDialog progressDialog;
public void downloadImage() {
//第二步
Observable.just(PATH)//分发事件
//第三步
.map(new Function<String, Bitmap>() {
@Override
public Bitmap apply(String s) throws Exception {
URL url = new URL(PATH);
URLConnection urlConnection = url.openConnection();
HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
httpURLConnection.setConnectTimeout(5000);
int responseCode = httpURLConnection.getResponseCode();
if (httpURLConnection.HTTP_OK == responseCode) {
Bitmap bitmap = BitmapFactory.decodeStream(httpURLConnection.getInputStream());
return bitmap;
}
return null;
}
})
.map(new Function<Bitmap, Bitmap>() {//给Bitmap加水印
@Override
public Bitmap apply(Bitmap bitmap) throws Exception {
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setTextSize(36);
return drawTextToBitmap(bitmap,"我是水印",paint,100,100);
}
})
.map(new Function<Bitmap, Bitmap>() {
@Override
public Bitmap apply(Bitmap bitmap) throws Exception {
if(bitmap == null){
Log.e("Tag","图片下载失败.....");
}
return bitmap;
}
})
//日志
.map(new Function<Bitmap, Bitmap>() {
@Override
public Bitmap apply(Bitmap bitmap) throws Exception {
Log.e("Tag",System.currentTimeMillis()+"下载了图片");
return bitmap;
}
})
//给上游分配异步操作线程
.subscribeOn(Schedulers.io())
//给下游分配Android主线程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Bitmap>() {
@Override
public void onSubscribe(Disposable d) {
//第一步
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("加载中...");
progressDialog.show();
}
@Override
public void onNext(Bitmap value) {
//第四步
img.setImageBitmap(value);
}
//onError执行不会执行onComplete
@Override
public void onError(Throwable e) {
Log.e("TAg",e.getMessage());
if(progressDialog != null){
progressDialog.dismiss();
}
}
@Override
public void onComplete() {
//第五步
if(progressDialog != null){
progressDialog.dismiss();
}
}
});
}
// 图片上绘制文字 加水印
private final Bitmap drawTextToBitmap(Bitmap bitmap, String text, Paint paint, int paddingLeft, int paddingTop) {
Bitmap.Config bitmapConfig = bitmap.getConfig();
paint.setDither(true); // 获取跟清晰的图像采样
paint.setFilterBitmap(true);// 过滤一些
if (bitmapConfig == null) {
bitmapConfig = Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
canvas.drawText(text, paddingLeft, paddingTop, paint);
return bitmap;
}