Come posso fare ciò utilizzando Glide? Voglio l'immagine cache
per usarla anche un'altra volta. Grazie in anticipo.Impostare l'immagine di sfondo su Layout relativo utilizzando Glide in Android
risposta
È possibile caricare un'immagine in un RelativeLayout in questo modo. Ti sto solo mostrando la parte difficile che sta impostando un'immagine sullo sfondo.
Per la versione Glide prima 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);
}
}
});
Per la memorizzazione nella cache, fare riferimento a questa pagina: Caching and Cache Invalidation.
Aggiornamento per Gide v4 in poi:
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);
}
}
});
Penso che il modo migliore per raggiungerlo è funziona con una propria implementazione ViewTarget, perché questa classe ha metodi specifici per essere gestiti da Glide automaticamente in diversi scenari.
L'implementazione astratta per ViewGroup (LinearLayout, RelativeLayout e così via).
public abstract class ViewGroupTarget<Z> extends ViewTarget<ViewGroup, Z> implements GlideAnimation.ViewAdapter {
public ViewGroupTarget(ViewGroup view) {
super(view);
}
/**
* Returns the current {@link android.graphics.drawable.Drawable} being displayed in the view using
* {@link android.widget.ImageView#getDrawable()}.
*/
@Override
public Drawable getCurrentDrawable() {
return view.getBackground();
}
/**
* Sets the given {@link android.graphics.drawable.Drawable} on the view using
* {@link android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable)}.
*
* @param drawable {@inheritDoc}
*/
@Override
public void setDrawable(Drawable drawable) {
view.setBackground(drawable);
}
/**
* Sets the given {@link android.graphics.drawable.Drawable} on the view using
* {@link android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable)}.
*
* @param placeholder {@inheritDoc}
*/
@Override
public void onLoadStarted(Drawable placeholder) {
view.setBackground(placeholder);
}
/**
* Sets the given {@link android.graphics.drawable.Drawable} on the view using
* {@link android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable)}.
*
* @param errorDrawable {@inheritDoc}
*/
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
view.setBackground(errorDrawable);
}
/**
* Sets the given {@link android.graphics.drawable.Drawable} on the view using
* {@link android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable)}.
*
* @param placeholder {@inheritDoc}
*/
@Override
public void onLoadCleared(Drawable placeholder) {
view.setBackground(placeholder);
}
@Override
public void onResourceReady(Z resource, GlideAnimation<? super Z> glideAnimation) {
this.setResource(resource);
}
protected abstract void setResource(Z resource);
}
L'implementazione specifica, in questo caso per 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));
}
}
Per lavorare con.
Glide.with(this.getApplicationContext())
.load(R.drawable.your_image)
.asBitmap()
.into(new LinearLayoutTarget(this.getApplicationContext(), (LinearLayout) yourLinearLayoutInstanceHere));
O ancora più semplice funzionamento senza Bitmap.
L'implementazione specifica.
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);
}
}
Per lavorare con.
Glide.with(this.getApplicationContext())
.load(R.drawable.your_image)
.into(new LinearLayoutTarget((LinearLayout) yourLinearLayoutInstanceHere));
In realtà dovrebbe essere la differenza molto importante di 'ViewGroupTarget
- 1. come impostare dinamicamente l'altezza del layout relativo in Android
- 2. Layout sfondo Android alpha
- 3. Come impostare il valore alfa per il mio layout Relativo?
- 4. Android "layout_alignParentBottom" nel layout relativo
- 5. Layout relativo in ScrollView
- 6. Impostazione dell'immagine di sfondo per il layout relativo?
- 7. Come impostare lo sfondo del layout nell'interfaccia utente Android
- 8. Layout relativo ignorato setMargin()
- 9. Come impostare OkHttpClient per glide
- 10. Modifica layout Android da Relativo a Linear
- 11. layout relativo dipendenze circolari Android errore
- 12. Android: imposta lo sfondo del layout utilizzando il percorso dell'immagine
- 13. Oggetto Android Animatore sfondo animatoColore del layout
- 14. layout Android immagine di sfondo e colore
- 15. Android - Come impostare un layout semi-trasparente?
- 16. Dimensioni segnaposto Android Glide
- 17. Come impostare lo sfondo di Android PopupMenu su Bianco
- 18. come impostare il colore di sfondo nel layout xml?
- 19. Catturare l'istantanea del layout Relativo con sfondo trasparente dà una bitmap con sfondo nero non trasparente
- 20. Glide. Cache su memoria esterna (scheda SD)
- 21. Android relativo centro layout verticale con un margine
- 22. Come impostare lo sfondo in Android
- 23. Layout relativo. Tra 2 articoli
- 24. Android - Come impostare l'immagine dello sfondo?
- 25. iOS8 Auto layout programmaticamente pin al margine di layout relativo
- 26. impostare il colore di sfondo: Android
- 27. Come correggere gli angoli arrotondati impostati in Android per il layout Relativo o altro?
- 28. Sfondo trasparente su CardView - Android
- 29. Come mettere una visualizzazione su un'altra in Layout relativo programmaticamente in Android?
- 30. come disattivare le viste dietro popup relativo layout - android
Perché è necessario 'Build.VERSION.SDK_INT> = Build.VERSION_CODES.JELLY_BEAN'? – jaynp
@ dal102 che era per le mie esigenze specifiche della mia app –
Senza di esso si otterrà l'avvertimento 'Chiama richiede il livello API 16 (min corrente è XX): android.view.View # setBackground' -> quindi questa soluzione funzionerà solo su JELLY_BEAN e API superiore – thorin86