As of Picasso 2.4.0, this operation is now directly supported. Simply add a .resize()
request with one of the dimensions as 0
. For example, to have a variable width, your call would become:
Picasso.with(this.context)
.load(message_pic_url)
.placeholder(R.drawable.profile_wall_picture)
.resize(0, holder.message_picture.getHeight()),
.into(holder.message_picture);
Note that this call uses .getHeight()
and therefore assumes the message_picture
has already been measured. If that isn't the case, such as when you have inflated a new view in a ListAdapter
, you can delay this call until after measurement by adding an OnGlobalLayoutListener
to the view:
holder.message_picture.getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
// Wait until layout to call Picasso
@Override
public void onGlobalLayout() {
// Ensure we call this only once
imageView.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
Picasso.with(this.context)
.load(message_pic_url)
.placeholder(R.drawable.profile_wall_picture)
.resize(0, holder.message_picture.getHeight())
.into(holder.message_picture);
}
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…