編輯:關於Android編程
最近我聽到不少人提到rxJava,但是在實際項目中並沒有見到,看了一些博客文檔,也看的不太明白,於是拿起Android Studio,先撸一個demo看看。 rxjava使用的是觀察者模式。 Observable 被觀察者 Observer 觀察者 Observable 和 Observer 通過 subscribe 關聯起來。
好吧 看起來流程很簡單很簡單,那麼demo走起來。
demo為從sd卡中讀取一張圖片,在imageView中顯示出來,然後做模糊,顯示到另一個imageView中.
在build.gradle中引入
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.1'
這裡就不貼關於模糊的代碼了。直接上rx相關的代碼。
新建一個被觀察者,傳入一個參數–文件地址 dir
Observable observable = Observable.just(dir).map(new Function() { @Override public Bitmap apply(String s) throws Exception { return getBitmap(s); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread());
map方法的參數function制定了被觀察者的行為,兩個泛型參數,第一個為傳入的參數類型,第二個為返回的參數類型。
subscribeOn(Schedulers.io())方法制定了被觀察者的行為發生在io線程。
observeOn(AndroidSchedulers.mainThread())觀察者的行為發生在android的主線程(ui線程);
然後新建一個觀察者。
Consumerconsumer = new Consumer () { @Override public void accept(Bitmap bitmap) throws Exception { iv.setImageBitmap(bitmap); fileBitmap = bitmap ; blur(bitmap); } };
Consumer為一個觀察者類,接收bitmap然後做後續操作。
觀察者有了,被觀察者也有了,現在關聯起來。
observable.subscribe(consumer);
好了,一次rx異步回調完成了,但是我們還沒有做照片模糊處理。模糊應該在io之後,就是上面調用的 blur(bitmap) 方法
private void blur(Bitmap bitmap) { Observable blurOjservable = Observable.just(bitmap) .map(new Function() { @Override public Bitmap apply(Bitmap bitmap) throws Exception { return boxBlurFilter(bitmap); } }) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()); Consumer blurConsumer = new Consumer () { @Override public void accept(Bitmap bitmap) throws Exception { blur_iv.setImageBitmap(bitmap); gaosiBitmap = bitmap ; } }; blurOjservable.subscribe(blurConsumer); }
再一次使用rxjava完成了異步操作,這一次的模糊計算發生在Schedulers.computation()線程,Schedulers.computation()線程用於計算操作,不能在其中做io操作,會阻塞cpu,影響cpu的效率。
一個rxjava demo就完成了,一共兩次回調,一次io線程回調主線程,一次計算線程回調主線程。
第三課(第三步):支持以手指觸控的任意點為中心開始縮放關鍵部分是在縮放的時候不斷進行邊界檢測,防止放大後縮小後出現白邊: /** * 在縮放的時候進行邊界控制
Android中UI特效 android經典開源代碼分享 本文原始網址 作者為23code,歡迎給作者投稿 其它UI相關的網址: https://github.co
Monkey 是Android SDK提供的一個命令行工具, 可以簡單,方便地運行在任何版本的Android模擬器和實體設備上。 Monkey會發送偽隨機的用戶事件流,適
轉載須注明。 一個博士同學,找到我,想我合伙,幫助他解決移動端產品。他給我描述了他的想法,搜布,用圖像識別的算法去搜索布匹,然後推薦,然後關聯商家。這麼一個