Android
滑空
サーチ…
前書き
****警告このマニュアルは維持されておらず、頻繁に不正確です****
グライドの公式文書はもっと良い出典です:
Glide v4については、 http: //bumptech.github.io/glide/を参照してください。 Glide v3については、 https://github.com/bumptech/glide/wikiを参照してください 。
備考
Glideは、メディアのデコード、メモリとディスクのキャッシュ、およびリソースのプーリングをシンプルで使いやすいインタフェースにまとめた、Android用の高速で効率的なオープンソースのメディア管理および画像読み込みフレームワークです。
Glideは、ビデオ静止画、画像、アニメーションGIFの取り出し、デコード、および表示をサポートしています。 Glideには、開発者がほぼすべてのネットワークスタックにプラグインできる柔軟なAPIが含まれています。
デフォルトでは、GlideはカスタムHttpUrlConnectionベースのスタックを使用しますが、ユーティリティライブラリをGoogleのVolleyプロジェクトやSquareのOkHttpライブラリにプラグインします。
Glideの主な焦点は、あらゆる種類の画像のスクロールを可能な限りスムーズかつ高速に行うことですが、Glideは、リモート画像を取得、サイズ変更、および表示する必要があるほとんどすべての場合にも有効です。
ソースコードとその他のドキュメントはGitHubで入手できます: https : //github.com/bumptech/glide
あなたのプロジェクトにグライドを追加する
公式文書から:
Gradleの場合:
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:4.0.0'
compile 'com.android.support:support-v4:25.3.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
}
Mavenの場合:
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r7</version>
</dependency>
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>compiler</artifactId>
<version>4.0.0</version>
<optional>true</optional>
</dependency>
ProGuard(DexGuard)の設定と使用方法によっては、proguard.cfgに以下の行を追加する必要があります(詳細はGlideのwikiを参照)。
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
画像の読み込み
ImageView
指定されたURL、Uri、リソースID、またはその他のモデルからImageView
画像をロードするには:
ImageView imageView = (ImageView) findViewById(R.id.imageView);
String yourUrl = "http://www.yoururl.com/image.png";
Glide.with(context)
.load(yourUrl)
.into(imageView);
Urisの場合、 yourUrl
をあなたのUri( content://media/external/images/1
)に置き換えます。 yourUrl
場合、 yourUrl
をリソースID( R.drawable.image
)に置き換えます。
RecyclerViewとListView
ListViewまたはRecyclerViewでは、まったく同じ行を使用できます。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
String currentUrl = myUrls.get(position);
Glide.with(context)
.load(currentUrl)
.into(myViewHolder.imageView);
}
onBindViewHolder
で読み込みを開始しない場合は、 ImageView
変更する前にImageView
Glideが管理している可能性があることを確認してくださいclear()
。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
String currentUrl = myUrls.get(position);
if (TextUtils.isEmpty(currentUrl)) {
Glide.clear(viewHolder.imageView);
// Now that the view has been cleared, you can safely set your own resource
viewHolder.imageView.setImageResource(R.drawable.missing_image);
} else {
Glide.with(context)
.load(currentUrl)
.into(myViewHolder.imageView);
}
}
グライドサークル変換(円形ImageViewでイメージをロード)
グライドを使用して円画像を作成します。
public class CircleTransform extends BitmapTransformation {
public CircleTransform(Context context) {
super(context);
}
@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}
private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}
@Override public String getId() {
return getClass().getName();
}
}
使用法:
Glide.with(context)
.load(yourimageurl)
.transform(new CircleTransform(context))
.into(userImageView);
デフォルトの変換
グライドには、2つのデフォルト変換、フィット中心と中央作図が含まれます。
フィットセンター:
Glide.with(context)
.load(yourUrl)
.fitCenter()
.into(yourView);
フィットセンターは、AndroidのScaleType.FIT_CENTERと同じ変換を実行します。
センター作物:
Glide.with(context)
.load(yourUrl)
.centerCrop()
.into(yourView);
Center cropはAndroidのScaleType.CENTER_CROPと同じ変換を実行します。
詳細については、 Glideのwikiを参照してください。
カスタムグライドターゲットで丸みを帯びたコーナー画像を滑らせる
まずユーティリティクラスを作成するか、このメソッドを必要なクラスで使用します
public class UIUtils {
public static BitmapImageViewTarget getRoundedImageTarget(@NonNull final Context context, @NonNull final ImageView imageView,
final float radius) {
return new BitmapImageViewTarget(imageView) {
@Override
protected void setResource(final Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(context.getResources(), resource);
circularBitmapDrawable.setCornerRadius(radius);
imageView.setImageDrawable(circularBitmapDrawable);
}
};
}
画像を読み込む:
Glide.with(context)
.load(imageUrl)
.asBitmap()
.into(UIUtils.getRoundedImageTarget(context, imageView, radius));
asBitmap()を使用するので、アニメーションは削除されます。この場所で独自のアニメーションを使用するには、animate()メソッドを使用します。
デフォルトのグライドアニメーションに同様のフェードインを施した例
Glide.with(context)
.load(imageUrl)
.asBitmap()
.animate(R.anim.abc_fade_in)
.into(UIUtils.getRoundedImageTarget(context, imageView, radius));
このアニメーションは、サポートライブラリのプライベートリソースであることに注意してください。変更または削除される可能性があるため、使用することはお勧めできません。
また、 RoundedBitmapDrawableFactoryを使用するにはサポートライブラリが必要です
画像のプリロード
リモートイメージをプリロードし、イメージが一度だけダウンロードされるようにするには:
Glide.with(context)
.load(yourUrl)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.preload();
次に:
Glide.with(context)
.load(yourUrl)
.diskCacheStrategy(DiskCacheStrategy.SOURCE) // ALL works here too
.into(imageView);
ローカルイメージをプリロードし、変換されたコピーがディスクキャッシュ(およびおそらくメモリキャッシュ)にあることを確認するには:
Glide.with(context)
.load(yourFilePathOrUri)
.fitCenter() // Or whatever transformation you want
.preload(200, 200); // Or whatever width and height you want
次に:
Glide.with(context)
.load(yourFilePathOrUri)
.fitCenter() // You must use the same transformation as above
.override(200, 200) // You must use the same width and height as above
.into(imageView);
プレースホルダとエラー処理
読み込み中にDrawableを追加する場合は、プレースホルダを追加できます。
Glide.with(context)
.load(yourUrl)
.placeholder(R.drawable.placeholder)
.into(imageView);
ロードが何らかの理由で失敗した場合にDrawableを表示するには:
Glide.with(context)
.load(yourUrl)
.error(R.drawable.error)
.into(imageView);
nullモデル(URL、Uri、ファイルパスなど)を提供する場合にDrawableを表示するには:
Glide.with(context)
.load(maybeNullUrl)
.fallback(R.drawable.fallback)
.into(imageView);
カスタム変換なしで円形ImageViewにイメージをロードする
カスタムBitmapImageViewTargetを作成して、イメージをロードします。
public class CircularBitmapImageViewTarget extends BitmapImageViewTarget
{
private Context context;
private ImageView imageView;
public CircularBitmapImageViewTarget(Context context, ImageView imageView)
{
super(imageView);
this.context = context;
this.imageView = imageView;
}
@Override
protected void setResource(Bitmap resource)
{
RoundedBitmapDrawable bitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource);
bitmapDrawable.setCircular(true);
imageView.setImageDrawable(bitmapDrawable);
}
}
使用法:
Glide
.with(context)
.load(yourimageidentifier)
.asBitmap()
.into(new CircularBitmapImageViewTarget(context, imageView));
グライド画像の読み込みに失敗しました
Glide
.with(context)
.load(currentUrl)
.into(new BitmapImageViewTarget(profilePicture) {
@Override
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(context.getResources(), resource);
circularBitmapDrawable.setCornerRadius(radius);
imageView.setImageDrawable(circularBitmapDrawable);
}
@Override
public void onLoadFailed(@NonNull Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, SET_YOUR_DEFAULT_IMAGE);
Log.e(TAG, e.getMessage(), e);
}
});
ここでSET_YOUR_DEFAULT_IMAGE
場所あなたは、任意のデフォルト設定することができDrawable
。画像の読み込みに失敗した場合、この画像が表示されます。