2015-11-14 5 views
7

ビットマップをトリミングしてサイズ変更した後、Glideを使用してImageViewにビットマップをロードしたいと思います。グライドを使用してビットマップをImageViewにロード

画像が大量に読み込まれていて、画像サイズが小さいにもかかわらず、画像がキャッシュされている可能性があるので、ImageView.setImageBitmap(bitmap);を使用したくないので、Glideを使用する必要があります。

私はthis投稿を読んでいますが、私はそれを実装しようとしたときに彼の解決策を理解していませんでした。だから誰かがより洗練された、より理解しやすいソリューションを持っているかもしれません。

これは画像をピックアップしてビットマップを作成する私のコードです。

ImageView.setImageBitmap(bitmap);の代わりにグライドを使用する必要があります。

new AsyncTask<String, Void, Void>() { 
    Bitmap theBitmap = null; 
    Bitmap bm = null; 

    @Override 
    protected Void doInBackground(String... params) { 
     String TAG = "Error Message: "; 
     try { 
      //Load the image into bitmap 
      theBitmap = Glide. 
        with(mContext). 
        load("http://example.com/imageurl"). 
        asBitmap(). 
        into(-1, -1). 
        get(); 

      //resizes the image to a smaller dimension out of the main image. 
      bm = Bitmap.createBitmap(theBitmap, 0, 0, 210, 80); 
     } catch (final ExecutionException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (final InterruptedException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (final NullPointerException e) { 
      // 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void dummy) { 
     if (null != theBitmap) { 
      //Set image to imageview. 
      **// I would like to Use Glide to set the image view here Instead of .setImageBitmap function** 
      holder.mImageView.setImageBitmap(bm); 

      holder.mImageView.setAdjustViewBounds(true); 
      holder.mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     } 
    } 
}.execute(); 
+0

あなたの問題は何ですか?ビットマップがヌルか 'ImageView'が白い四角で表示されますか? –

+0

いいえ、bitmapがnullではないため、Bitmapイメージを直接設定するのではなく、ImageViewに設定するためにGlideを使用する必要があります。 –

+0

なぜなら、私はメモリキャッシュを必要とするたくさんのイメージを読み込んでいるからです。私は何を意味するのか理解していますか? –

答えて

18

グライドで画像を読み込むにはAsyncTaskは必要ありません。グライドロードイメージ非同期。 このコードを使用してください:

Glide.with(mContext) 
       .load("http://example.com/imageurl") 
       .asBitmap() 
       .into(new SimpleTarget<Bitmap>() { 
        @Override 
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
         // you can do something with loaded bitmap here 

         // ..... 

         holder.mImageView.setImageBitmap(resource); 
        } 
       }); 
+0

いいえ、centerCropではなくTOPに画像を切り抜きたいので、それを使ってビットマップを作成してからそれを与えて(0、0、210、80)、そのサイズに合わせて開始しますセンターの代わりにトップから –

+0

私は自分の答えを編集しました。これをチェックしてください。 p.s.上のビットマップを開始するために定数値(210,80など)を使用していますか?私はそれが実用的ではないと思っています。 –

+0

ありがとうございますが、これはどちらもうまくいきませんでした。ビットマップをonResourceReady内に作成すると、その外側のonResourceReadyと同じことが行われます。変更はありません! –