Redimensione a imagem para largura total e altura fixa com o Picasso

164

Eu tenho um LinearLayout vertical em que um dos itens é ImageViewcarregado usando o Picasso. Preciso aumentar a largura da imagem para a largura total do dispositivo e exibir a parte central da imagem cortada por uma altura fixa (150dp). Atualmente, tenho o seguinte código:

Picasso.with(getActivity()) 
    .load(imageUrl) 
    .placeholder(R.drawable.placeholder) 
    .error(R.drawable.error) 
    .resize(screenWidth, imageHeight)
    .centerInside() 
    .into(imageView);

Quais valores devo colocar screenWidthe imageHeight(= 150dp)?

David Rabinowitz
fonte

Respostas:

486

Você está procurando:

.fit().centerCrop()

O que estes significam:

  • fit- aguarde até que a ImageViewmedida seja medida e redimensione a imagem para corresponder exatamente ao seu tamanho.
  • centerCrop- redimensione a imagem respeitando a proporção até que ela preencha o tamanho. Corte a parte superior e inferior ou esquerda e direita para que corresponda exatamente ao tamanho.
Jake Wharton
fonte
5
Qual deve ser a altura do imageView? Não quero uma altura fixa para o meu imageView. Deve mudar de acordo com a altura da imagem.
Chetna
4
.fit().centerInside()trabalhou para mim onde apenas usando .centerInside()estava falhando com Center inside requires calling resize with positive width and height.mensagem de erro.
Rock Lee
@Rock Lee, você precisa redimensioná-lo: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK
8
.fit().centerCrop()ou .fit().centerInside()não está funcionando. A imagem não está sendo carregada imageView. sem .fit()imagem está carregando bem. Eu não estou usando .resize()nos dois casos.
Nishant Bhakta
como redimensioná-la sem cortar-lo a partir de qualquer lado e também manter o aspecto
Rohit Sharma
1

Em alguns casos, o ajuste () é inútil. Antes de aguardar o término da medição de largura e altura. Então você pode usar globallayoutlistener. por exemplo;

imageView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                Picasso.with(getActivity())
                        .load(imageUrl)
                        .placeholder(R.drawable.placeholder)
                        .error(R.drawable.error)
                        .resize(screenWidth, imageHeight)
                        .fit
                        .centerInside()
                        .into(imageView);
                imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
Umut ADALI
fonte