RxJava初入學習(一)

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

  • [x] 搭配色算法推薦
  • [ ] 搭配色展示(RecyclerView)
  • [ ] 目前只做了16進制顏色,RGB有些邏輯問題
  • [ ] 刪除過快會有卡頓(不知道如何解決)
  • [ ] 顏色保存列表

截圖

來自: http://www.jianshu.com/p/6c739ba1b64e

 本文由用戶 idiotslkp 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!