2015-11-14 13 views
7

Chciałbym użyć Glide do załadowania mapy bitowej do ImageView po przycięciu i zmianie rozmiaru bitmapy.Użyj slajdu, aby załadować mapę bitową do ImageView

Nie chcę używać ImageView.setImageBitmap(bitmap);, ponieważ ładuję wiele obrazów i może to wymagać trochę pamięci, chociaż obrazy są małe, po prostu potrzebuję użyć Glide, ponieważ wiem, że optymalizuje buforowanie obrazu.

Przeczytałem this post, ale nie do końca rozumiałem jego rozwiązanie, gdy próbowałem go wdrożyć. Więc może ktoś ma czystsze i łatwiejsze do zrozumienia rozwiązanie.

To jest mój kod, który odbiera obraz i tworzy z niego mapę bitową.

Potrzebuję użyć przesuwania zamiast 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

Czy możesz mi powiedzieć, jaki jest twój problem? Bitmapa ma wartość zerową lub twój "obraz" pokazuje biały kwadrat? –

+0

Nie, mapa bitowa nie ma wartości null, potrzebuję użyć Glide, aby ustawić obraz bitmapowy w ImageView, zamiast ustawiać go bezpośrednio. –

+0

Powód jest taki, że ładuję wiele obrazów, które wymagają buforowania pamięci. Rozumiesz co mam na myśli? –

Odpowiedz

18

Nie trzeba AsyncTask, aby załadować obraz z szybowaniem. Szybka ładuj obraz asynchrony. Spróbuj użyć tego kodu:

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

Nie, chcę przyciąć obrazek do góry, nie do środka, dlatego zdecydowałem się stworzyć z niego mapę bitową, a następnie podałem go (0, 0, 210, 80), aby był przycięty do tego rozmiaru i zacząć z góry zamiast z centrum. –

+0

Edytowałem swoją odpowiedź, proszę to sprawdzić. p.s. Czy używasz wartości stałych (na przykład 210,80), aby rozpocząć Bitmap na górze? Myślę, że jest to złe ćwiczenie i powinieneś użyć niestandardowego 'Drawable' z najwyższym stopniem dopasowania. –

+0

Dzięki, ale to też nie działa, Kiedy tworzysz swoją bitmapę w witrynie onResourceReady, nadal działa to samo, co na zewnątrz na ResourceReady. Bez zmian! –

Powiązane problemy