2015-12-03 1 views
2

У меня есть RecyclerView с LinearLayoutManager. Я хочу иметь изображение в качестве фона, но размер изображения является динамическим. Я хочу, чтобы она была полной ширины и соответствовала высоте. Это то, что я в настоящее время:Обновить RecyclerView Высота элемента после загрузки изображения?

enter image description here

Я попытался это:

Picasso.with(context).load(pictureUrl).into(new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) 
     { 
      holder.picture.setImageBitmap(bitmap); 

      RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.itemView.getLayoutParams(); 
      params.height = bitmap.getHeight(); 
      holder.itemView.setLayoutParams(params); 
      //notifyItemChanged(position); 
     } 

     @Override public void onBitmapFailed(Drawable drawable) {} 
     @Override public void onPrepareLoad(Drawable drawable) {} 
    }); 

Но тогда она даже не загружается всего:

enter image description here

EDIT: похоже, это onBitmapLoaded() даже не получится, хотя onPrepareLoad().

+0

Вы попробовали adjustViewBounds? –

ответ

2

Думаю, мне удалось решить это самостоятельно. Вот что я сделал:

Picasso.with(context).load(pictureUrl).into(holder.picture, new com.squareup.picasso.Callback() { 
     @Override 
     public void onSuccess() { 
      Drawable drawable = holder.picture.getDrawable(); 
      RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.itemView.getLayoutParams(); 
      params.height = (int)((float)screenWidth/((float)drawable.getIntrinsicWidth()/(float)drawable.getIntrinsicHeight())); 
      holder.itemView.setLayoutParams(params); 
      holder.itemView.requestLayout(); 
     } 

     @Override 
     public void onError() { 
     } 
    });