2015-11-28 17 views

Antwort

26

Sie können ein Bild in einem RelativeLayout wie folgt laden. Ich zeige Ihnen nur den schwierigen Teil, der ein Bild in den Hintergrund stellt.

Für Glide Version vor 4.X

Glide.with(this).load(imageViewPath).asBitmap().into(new SimpleTarget<Bitmap>(relLayoutWidth, relLayoutHeight) { 
    @Override 
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
     Drawable drawable = new BitmapDrawable(context.getResources(), resource); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
      yourRelativeLayout.setBackground(drawable); 
     } 
    } 
}); 

Für Caching, auf diese Seite verweisen: Caching and Cache Invalidation.

Update für Gide Weiter v4:

GlideApp.with(this).load(R.drawable.backgroundimage).into(new SimpleTarget<Drawable>() { 
      @Override 
      public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
        yourRelativeLayout.setBackground(resource); 
       } 
      } 
     }); 
+0

Warum wird 'Build.VERSION.SDK_INT> = Build.VERSION_CODES.JELLY_BEAN' benötigt? – jaynp

+0

@ dal102 das war für meine app spezifische Bedürfnisse –

+1

Ohne es werden Sie Warnung 'Anruf erfordert API-Ebene 16 (aktuelle min ist XX): android.view.View # setBackground' -> so wird diese Lösung nur auf JELLY_BEAN und funktionieren höhere API – thorin86

6

Ich denke, der beste Weg, es funktioniert mit Ihrer eigenen ViewTarget Implementierung zu erreichen, weil diese Klasse spezifische Methoden hat von Glide automatisch in verschiedenen Szenarien behandelt werden.

Die abstrakte Implementierung für ViewGroup (LinearLayout, RelativeLayout usw.).

Die spezifische Implementierung, in diesem Fall für LinearLayout.

public class LinearLayoutTarget extends ViewGroupTarget<Bitmap> { 

    private Context context; 

    public LinearLayoutTarget(Context context, LinearLayout linearLayout) { 

     super(linearLayout); 

     this.context = context; 
    } 

    /** 
    * Sets the {@link android.graphics.Bitmap} on the view using 
    * {@link android.widget.ImageView#setImageBitmap(android.graphics.Bitmap)}. 
    * 
    * @param resource The bitmap to display. 
    */ 
    @Override 
    protected void setResource(Bitmap resource) { 

     view.setBackground(new BitmapDrawable(context.getResources(), resource)); 
    } 

} 

Um mit zu arbeiten.

Glide.with(this.getApplicationContext()) 
       .load(R.drawable.your_image) 
       .asBitmap() 
       .into(new LinearLayoutTarget(this.getApplicationContext(), (LinearLayout) yourLinearLayoutInstanceHere)); 

Oder noch einfacheres Arbeiten ohne Bitmap.

Die spezifische Implementierung.

public class LinearLayoutTarget extends ViewGroupTarget<Drawable> { 

    public LinearLayoutTarget(LinearLayout linearLayout) { 

     super(linearLayout); 
    } 

    /** 
    * Sets the {@link android.graphics.Bitmap} on the view using 
    * {@link android.widget.ImageView#setImageBitmap(android.graphics.Bitmap)}. 
    * 
    * @param resource The bitmap to display. 
    */ 
    @Override 
    protected void setResource(Drawable resource) { 

     view.setBackground(resource); 
    } 

} 

Um zu arbeiten.

Glide.with(this.getApplicationContext()) 
       .load(R.drawable.your_image) 
       .into(new LinearLayoutTarget((LinearLayout) yourLinearLayoutInstanceHere)); 
+2

Eigentlich sollte 'ViewGroupTarget ' nicht 'Drawable 'sehr wichtiger Unterschied sein – AndyRoid

Verwandte Themen