2017-04-18 6 views
0

縮小版プレビュー画像を読み込み、次に画像画像を読み込もうとしています。万が一イメージをロードした場合、プレビューイメージが破棄されるようにします。ReactiveXによるプログレッシブ画像読み込み

は以下の実施例を検討:シーケンス1は、プレビュー画像が

  • 配列2を要求している

    • の画像が
    • シーケンス3シーケンス4は、得られた画像である合成配列
    • ある要求雇用されていますレンダリングシーケンス

    Example 1: 
    
    1 ------P------- 
    2 ---------H---- 
    
    3 ------P--H---- 
    
    4 ------*--*---- 
    
    
    Example 2: 
    
    1 ----H--------- 
    2 --------P----- 
    
    3 ----H|-------- 
    
    4 ----*|-------- 
    

    私がこれまで雇用がすでにロードされ、takeWhileを使用されているかどうかを示しますが、これはいくつかの非エレガントな操作を必要とし、また、副作用を伴う状態変数を保存しているを作ってみた唯一の解決策。

    私はそうする正しいRX方法を探しています。

  • 答えて

    4

    あなたは、状態を保存し、変数を使用せずにそれを行うことができます。

    Observable<Bitmap> hiresObservable = getHiresObservable() 
         .share() 
    Observable<Bitmap> previewObservable = getPreviewObservable() 
         .takeUntil(hiresObservable); 
    
    
    Observable.merge(previewObservable, hiresObservable) 
         .subscribe(bitmap -> { 
          //do something with the bitmap 
         }); 
    

    これは非常に似たこのanswerにあります。

    +0

    は完全に機能します。なぜ 'share()'が必要なのですか? – Shahar

    +0

    それ以外の場合は、hiresObservableを2回購読する必要がありません。あなたのObservableを 'マルチキャスト'して複数のサブスクリプションに同じ値が表示されるようにしてください。実際には他の 'マルチキャスト'レース(たとえば、キャッシュを持っている人を雇った場合)は、ここで私の説明を読むことができます:http://stackoverflow.com/a/42826568/3903847 – yosriz