RxJava2.X学习---Observable.just(PATH)

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;
    }

猜你喜欢

转载自blog.csdn.net/baidu_24743861/article/details/108877432