Android 毕加索-指示从web加载的位图的回调
我想设置从web加载图像时触发的回调。我知道fetch的用法Android 毕加索-指示从web加载的位图的回调,android,imageview,picasso,Android,Imageview,Picasso,我想设置从web加载图像时触发的回调。我知道fetch的用法 Picasso.with(getApplicationContext()).load(URL).fetch(new Callback() { @Override public void onSuccess() { imageView.setAlpha(0f); Picasso.with(get
Picasso.with(getApplicationContext()).load(URL).fetch(new Callback() {
@Override
public void onSuccess() {
imageView.setAlpha(0f);
Picasso.with(getApplicationContext()).load(URL).into(imageView);
imageView.animate().setDuration(2000).alpha(1f).start();
}
@Override
public void onError() {
}
});
但我不使用上层实现。我想得到一个位图,并改变它,然后显示到图像视图
我希望这个目标对我的案子有效。但是onBitmapLoaded不会触发很多次。我不明白为什么
Picasso.with(getApplicationContext()).load(URL).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
imageView.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
一种可能的解释是,您正在创建的
Target
实例在使用之前会被垃圾收集,因为它们在任何地方都没有被强烈引用。从javadoc:
注意:此方法保留对目标实例的弱引用,并且
如果您不保持对它的强引用,它将被垃圾收集
您可以在ViewHolder
或视图中保留强引用(这样,仅当视图也被收集时,它才会被收集)
例如(在视图中):
也许用Glide你可以解决你的问题
Glide.with(this)
.load(URL)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean =
false
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
imageView.alpha = 0F
imageView.animate().alpha(1F).setDuration(TimeUnit.MILLISECONDS.toMillis(2000)).start()
return false
}
})
.into(imageView)
Glide.with(这个)
.load(URL)
.listener(对象:RequestListener{
重写fun onLoadFailed(e:GlideException?,model:Any?,target:target?,isFirstResource:Boolean):布尔=
错误的
覆盖onResourceReady(资源:可绘制?、模型:任意?、目标:目标?、数据源:数据源?、isFirstResource:Boolean):布尔{
imageView.alpha=0F
imageView.animate().alpha(1F).setDuration(TimeUnit.millis.toMillis(2000)).start()
返回错误
}
})
.into(图像视图)
(如果我理解您的正确…into方法在加载到图像视图之前不会返回位图。如何预处理图像?可能首先要做的是检查解释是否正确,我会更新答案
Glide.with(this)
.load(URL)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean =
false
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
imageView.alpha = 0F
imageView.animate().alpha(1F).setDuration(TimeUnit.MILLISECONDS.toMillis(2000)).start()
return false
}
})
.into(imageView)