RxJava

本文介绍了一种在Android中使用RxJava处理图像的方法,包括圆形图片、圆角图片的绘制,以及使用Fresco加载图片和GIF动图。同时,文章还展示了如何通过反射机制实现对象的实例化和属性设置,以及如何使用RxJava实现线程间的操作和数据传递。

/RxAndroid所依赖的库/
compile ‘io.reactivex:rxandroid:1.2.1’
compile ‘io.reactivex:rxjava:1.1.6’

@OnClick(R.id.yuanxing)
    public void  yuanxing(){
        Uri parse = Uri.parse(jtu);
        RoundingParams roundingParams = RoundingParams.asCircle();
        GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy build = builder.setRoundingParams(roundingParams).build();
        simg.setHierarchy(build);
        simg.setImageURI(parse);
    }
    @OnClick(R.id.yuanjiao)
    public void  yuanjia(){
        Uri parse2 = Uri.parse(jtu);
        RoundingParams roundingParams2 = RoundingParams.fromCornersRadius(20f);
        GenericDraweeHierarchyBuilder builder2 = new GenericDraweeHierarchyBuilder(getResources());
        GenericDraweeHierarchy build2 = builder2.setRoundingParams(roundingParams2).build();
        simg.setHierarchy(build2);
        simg.setImageURI(parse2);
    }
    @OnClick(R.id.kuangao)
    public void  kuangao(){
    // 图片的地址
            Uri uri = Uri.parse(jtu);
            //创建控件
            //创建Fresco加载图片的控件对象
            simpleDraweeView = new SimpleDraweeView(this); // 设置控件对象的宽高比,必须设置,参数浮点型,大于1,则宽度是高度的几倍.
            simpleDraweeView.setAspectRatio(0.5f);
            //图片请求
            ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri).build();
            //加载图片的控制
            AbstractDraweeController build3 = Fresco.newDraweeControllerBuilder()
                    .setOldController(simpleDraweeView.getController())
                    .setImageRequest(request)
                    .build();
            //加载图片
            simpleDraweeView.setController(build3);
            ll_fresco.addView(simpleDraweeView);
    }
    @OnClick(R.id.dongtu)
    public void  dongtu(){
        Uri parse4 = Uri.parse(dtu);
        DraweeController draweeController = Fresco.newDraweeControllerBuilder()
                .setUri(parse4)
                .setAutoPlayAnimations(true)
                .build();
        simg.setController(draweeController);
    }
    @OnClick(R.id.zhijiezhi)
    public void  zhijiezhi(){
        Class<User> userClass = User.class;
        //通过这个类得到要使用的注解
        ZhuJie annotation = userClass.getAnnotation(ZhuJie.class);
        String name = annotation.name();
        try {
            //实例化这个类,她实际上是使用了没有参数的构造函数,而且他会初始化这个对象如果这个还没有初始化过。(有些静态变量在类初始化的时候要进行初始化)
            User user = userClass.newInstance();
            user.setName(name);
            Toast.makeText(this,user.getName(),Toast.LENGTH_SHORT).show();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    @OnClick(R.id.fanshe)
    public void  fanshe(){
        ArrayList<Integer> arl = new ArrayList<Integer>();
        // 将上面定义的Arraylist 返回Arraylist的class对象
        Class<? extends ArrayList> clazz = arl.getClass();
        // 获取Arraylist 类里面的add方法
        Method method = null;
        try {
            method = clazz.getMethod("add",Object.class);
            // 对arl对象调用由 Method 对象表示的底层方法 ,向集合中添加字符串
            method.invoke(arl, "这是一个字符串");
            //method.invoke(arl, "这是两个字符串");

        } catch (Exception e) {
            e.printStackTrace();
        }
        //使用增强for来循环输出 集合中的数据
        for (Object item : arl) {
            Log.e("lyq",item+"");
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mBind.unbind();
    }
private void RxAndroidThread() {
        //注意:这里用到了SD卡,记得加一下权限
        Observable.just(Environment.getExternalStorageDirectory().getAbsolutePath() + "/shuaige.jpg")
                //加载的是字符串,转换为Bitmp对象
                .map(new Func1<String, Bitmap>() {
                    @Override
                    public Bitmap call(String s) {
                        //打印线程所在名称
                        String Threadname = Thread.currentThread().getName();
                        System.out.println("Func1的call所在线程名称 : " + Threadname);

                        Bitmap bitmap = BitmapFactory.decodeFile(s);
                        return bitmap;
                    }
                })
                //该方法决定了Func1的call方法(被观察者执行逻辑)运行在哪个线程
                // IO:线程名称RxIoScheduler-2(子线程,内部用到了一个线程池)
                .subscribeOn(Schedulers.io())
                .subscribeOn(Schedulers.io())//可以执行多次,对不同数据,在不同的线程中调用
                //该方法决定了 Action1的call方法(观察者执行逻辑)运行在哪个线程  mainThread:主线程
                .observeOn(AndroidSchedulers.mainThread())//只能执行一次,多次调用,以第一次为基准
                .subscribe(new Action1<Bitmap>() {
                    @Override
                    public void call(Bitmap bitmap) {
                        //打印线程所在名称
                        String Threadname = Thread.currentThread().getName();
                        System.out.println("Action1的call所在线程名称 : " + Threadname);

                        ImageView.setImageBitmap(bitmap);
                    }
                });
    }

    private void RxAndroidClick() {
    /*
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    System.out.println("我被点击了");
                }
            });*/

        Observable.create(new MyOnSubscribe(mButton))
                .throttleFirst(1, TimeUnit.SECONDS)
                .subscribe(new Action1<View>() {
                    @Override
                    public void call(View view) {
                        System.out.println("我在call方法中,我被点击了,有反应了");
                    }
                });
    }

    class MyOnSubscribe implements Observable.OnSubscribe<View> {

        public MyOnSubscribe(View view) {
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    System.out.println("我被狂点中...");
                    //发布通知
                    mSubscriber.onNext(view);
                }
            });
        }
        private Subscriber mSubscriber;

        @Override
        public void call(Subscriber<? super View> subscriber) {
            mSubscriber = subscriber;
        }
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值