V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xcc3641
V2EX  ›  Android

新入 Rx,写了一个特别简单的 App,欢迎 V 巨们指点。

  •  
  •   xcc3641 · 2016-01-21 10:17:59 +08:00 · 9748 次点击
    这是一个创建于 3230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Gifts-for-designers


    Introduction

    一个为设计师设计的 APP( ´_ゝ`)一个特别简单项目

    主要用来练习 Rx ,当然这个适合初入 Rx 的看看。

    自己参考的教程给 Android 开发者的 RxJava 详解

    Github 地址:Gifts-for-designers可以给个 star 鼓励下( ◜◡‾)っ✂╰⋃╯

    Usage

    ( ´_ゝ`) 好像这个项目没有很多代码需要解释,不过我还是整理一份

    自定义字体

    //      字体
    Typeface fontFace = Typeface.createFromAsset(getAssets(),
    "font/Inconsolata.otf");
    Typeface tvFontFace = Typeface.createFromAsset(getAssets(), "font/Lobster.ttf");
    editTextHEX.setTypeface(fontFace);
    editTextRGB.setTypeface(fontFace);
    textView.setTypeface(tvFontFace);
    

    Rx 监听输入

    RxTextView.textChanges(editTextHEX)
                    .subscribeOn(AndroidSchedulers.mainThread())
                    .debounce(300, TimeUnit.MICROSECONDS)
                    .map(new Func1<CharSequence, String>() {
                        @Override
                        public String call(CharSequence charSequence) {
                            return charSequence.toString();
                        }
                    })
                    .observeOn(AndroidSchedulers.mainThread())
                    .doOnNext(new Action1<String>() {
                        @Override
                        public void call(String s) {
                            if (s.length() == 5) {
                                setBackground("56abe4", 0);
                                editTextRGB.setText("");
                            }
                            if (!colors.isEmpty()) {
                                colors.clear();
                                adapter.notifyDataSetChanged();
                            }
    
                        }
                    })
                    .filter(new Func1<String, Boolean>() {
                        @Override
                        public Boolean call(String s) {
                            return s.length() > 5;
                        }
                    })
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Action1<String>() {
                        @Override
                        public void call(String s) {
    
                            setBackground(s, 0);
    //                        addColorAdapter(s);
                            changeToRGB(s);
    
                        }
                        })
    

    改变背景颜色(有个过渡效果)

    /**
         * @param color
         * @param mark  0:HEX 1:RGB
         */
     public void setBackground(String color, int mark) {
            int i = 0;
            ValueAnimator paramInteger;
            Drawable localDrawable = this.relativeLayout.getBackground();
            if ((localDrawable instanceof ColorDrawable))
                i = ((ColorDrawable) localDrawable).getColor();
    
            if (mark == 0) {
                paramInteger = ValueAnimator.ofObject(new ArgbEvaluator(), i, Color
                        .parseColor("#" + color));
            } else {
                paramInteger = ValueAnimator.ofObject(new ArgbEvaluator(), i, mark);
            }
    
    
            paramInteger.setDuration(500L);
            paramInteger.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                                               public void onAnimationUpdate(ValueAnimator paramAnonymousValueAnimator) {
                                                   relativeLayout.setBackgroundColor((Integer)
                                                           paramAnonymousValueAnimator.getAnimatedValue());
                                               }
                                           }
    
            );
            paramInteger.start();
        }
    

    将 16 进制转化成 RGB

    private void changeToRGB(String s) {
            int red = Integer.parseInt(String.valueOf(s.charAt(0)) + s.charAt(1), 16);
            int green = Integer.parseInt(String.valueOf(s.charAt(2)) + s.charAt(3), 16);
            int blue = Integer.parseInt(String.valueOf(s.charAt(4)) + s.charAt(5), 16);
    
            Log.d(TAG, red + " " + green + " " + blue);
            editTextRGB.setText("(" + red + "," + green + "," + blue + ")");
    
        }
    

    Todo&Issues

    截图

    7 条回复    2016-01-22 13:36:22 +08:00
    master13
        1
    master13  
       2016-01-21 11:31:29 +08:00   ❤️ 1
    所以这个项目叫“蓝屏的 gay ,好喝的 gay ”?
    wingyiu
        2
    wingyiu  
       2016-01-21 11:34:57 +08:00
    函数式编程啊
    xcc3641
        3
    xcc3641  
    OP
       2016-01-21 12:27:03 +08:00
    @wingyiu 是的
    xcc3641
        4
    xcc3641  
    OP
       2016-01-21 12:27:23 +08:00
    @master13 哈哈 亮
    anthonyeef
        5
    anthonyeef  
       2016-01-21 12:39:10 +08:00
    我发现 TODO & Issue 里的那些钩可以随意打上 & 取消……

    xcc3641
        6
    xcc3641  
    OP
       2016-01-21 13:10:06 +08:00
    @anthonyeef markdown 里的~我也不知道为什么其他人也可以哈哈,但是你打了好像没有其他影响。哈哈
    ( ´_ゝ`)
    cheng4741
        7
    cheng4741  
       2016-01-22 13:36:22 +08:00
    @anthonyeef markdown 渲染成 html 后都可以打勾
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2950 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:16 · PVG 22:16 · LAX 06:16 · JFK 09:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.