3 回答
TA贡献1811条经验 获得超4个赞
确保您使用的是最新版本
implementation 'com.github.bumptech.glide:glide:4.9.0'
科特林:
Glide.with(this)
.asBitmap()
.load(imagePath)
.into(object : CustomTarget<Bitmap>(){
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
imageView.setImageBitmap(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
// this is called when imageView is cleared on lifecycle call or for
// some other reason.
// if you are referencing the bitmap somewhere else too other than this imageView
// clear it here as you can no longer have the bitmap
}
})
位图大小:
如果要使用图像的原始大小,请使用上面的默认构造函数,否则可以将所需的大小传递给位图
into(object : CustomTarget<Bitmap>(1980, 1080)
Java:
Glide.with(this)
.asBitmap()
.load(path)
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
旧答案:
随着 compile 'com.github.bumptech.glide:glide:4.8.0'以下
Glide.with(this)
.asBitmap()
.load(path)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
});
对于compile 'com.github.bumptech.glide:glide:3.7.0'及以下
Glide.with(this)
.load(path)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
imageView.setImageBitmap(resource);
}
});
现在您可能会看到一个警告 SimpleTarget is deprecated
原因:
弃用SimpleTarget的主要目的是警告您诱使您违反Glide的API合同的方式。具体来说,一旦清除SimpleTarget,它并不会迫使您停止使用已加载的任何资源,这可能导致崩溃和图形损坏。
将SimpleTarget仍然可以只要你确保你没有使用位图,一旦ImageView的清除使用。
TA贡献1951条经验 获得超3个赞
我对Glide不太熟悉,但是看起来如果您知道目标尺寸,则可以使用以下方法:
Bitmap theBitmap = Glide.
with(this).
load("http://....").
asBitmap().
into(100, 100). // Width and height
get();
看来您可以通过-1,-1,并获得完整尺寸的图像(纯粹基于测试,看不到文档记录)。
注意into(int,int)返回a FutureTarget<Bitmap>,因此您必须将其包装在try和catch块中,覆盖ExecutionException和InterruptedException。这是经过测试并可以正常工作的更完整的示例实现:
class SomeActivity extends Activity {
private Bitmap theBitmap = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// onCreate stuff ...
final ImageView image = (ImageView) findViewById(R.id.imageView);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Looper.prepare();
try {
theBitmap = Glide.
with(SomeActivity.this).
load("https://www.google.es/images/srpr/logo11w.png").
asBitmap().
into(-1,-1).
get();
} catch (final ExecutionException e) {
Log.e(TAG, e.getMessage());
} catch (final InterruptedException e) {
Log.e(TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void dummy) {
if (null != theBitmap) {
// The full bitmap should be available here
image.setImageBitmap(theBitmap);
Log.d(TAG, "Image loaded");
};
}
}.execute();
}
}
遵循下面的评论中Monkeyless的建议(这似乎也是官方方式),您可以使用SimpleTarget,可选地加上,override(int,int)以大大简化代码。但是,在这种情况下,必须提供确切的大小(不接受小于1的任何值):
Glide
.with(getApplicationContext())
.load("https://www.google.es/images/srpr/logo11w.png")
.asBitmap()
.into(new SimpleTarget<Bitmap>(100,100) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
image.setImageBitmap(resource); // Possibly runOnUiThread()
}
});
如@hennry所建议,如果您需要相同的图像,则使用new SimpleTarget<Bitmap>()
- 3 回答
- 0 关注
- 436 浏览
添加回答
举报