Glideを使用してこれを行うにはどうすればよいですか? cache
イメージをもう一度使用したいです。前もって感謝します。
このようなRelativeLayoutで画像をロードできます。背景に画像を設定するハードな部分を示しています。
4.Xより前のGlideバージョンの場合
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);
}
}
});
キャッシングについては、このページを参照してください: キャッシングとキャッシュの無効化 。
Gide 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);
}
}
});
このクラスには、さまざまなシナリオでGlideによって自動的に処理される特定のメソッドがあるため、それを実現する最良の方法は、独自のViewTarget実装で機能すると思います。
ViewGroupの抽象的な実装(LinearLayout、RelativeLayoutなど)。
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);
}
特定の実装(この場合は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));
}
}
で動作します。
Glide.with(this.getApplicationContext())
.load(R.drawable.your_image)
.asBitmap()
.into(new LinearLayoutTarget(this.getApplicationContext(), (LinearLayout) yourLinearLayoutInstanceHere));
または、ビットマップなしでさらに簡単に作業できます。
特定の実装。
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);
}
}
で動作します。
Glide.with(this.getApplicationContext())
.load(R.drawable.your_image)
.into(new LinearLayoutTarget((LinearLayout) yourLinearLayoutInstanceHere));
現在、バージョンGlideバージョン4.9.0では、相対レイアウトの背景を次のように設定できます。
Glide.with(MainActivity.this)
.load(IMAGE_URL)
.into(new CustomTarget<Drawable>() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
mLinearLayout.setBackground(resource);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
(SimpleTargetクラスは廃止予定なので、CustomTargetクラスを使用して画像を読み込む)
このようなRelativeLayoutで画像をロードできます。背景に画像を設定するハードな部分を示しています。
4.Xより前のGlideバージョン(非推奨なし)
Glide.with(this).load(ServiceGenerator.BASE_URL + url).into(new CustomTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
yourRelativeLayout.setBackground(resource);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
皆さんありがとう。あなたの答えはすべて私を助けてくれました。また、Glideの公式ドキュメントで役立つソリューションを見つけます。 Glide App Moduleを一般的に使用するために切り替えました。