Ubah ukuran gambar menjadi lebar penuh dan tinggi tetap dengan Picasso

164

Saya memiliki LinearLayout vertikal di mana salah satu item ImageViewdimuat menggunakan Picasso. Saya perlu menaikkan lebar gambar ke lebar perangkat penuh, dan untuk menampilkan bagian tengah gambar yang dipangkas dengan ketinggian tetap (150dp). Saat ini saya memiliki kode berikut:

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

Nilai mana yang harus saya masukkan screenWidthdan imageHeight(= 150dp)?

David Rabinowitz
sumber

Jawaban:

486

Anda mencari:

.fit().centerCrop()

Apa artinya ini:

  • fit- tunggu sampai ImageViewtelah diukur dan ubah ukuran gambar agar sama persis dengan ukurannya.
  • centerCrop- skala gambar dengan menghormati aspek rasio sampai memenuhi ukuran. Pangkas bagian atas dan bawah atau kiri dan kanan sehingga cocok dengan ukurannya.
Jake Wharton
sumber
5
Apa yang harus menjadi ketinggian imageView? Saya tidak ingin ketinggian tetap untuk imageView saya. Itu harus berubah sesuai dengan ketinggian gambar.
Chetna
4
.fit().centerInside()bekerja untuk saya di mana saja menggunakan .centerInside()sedang menabrak dengan Center inside requires calling resize with positive width and height.pesan kesalahan.
Rock Lee
@ Rock Lee, Anda perlu mengatur ulang ukurannya: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK
8
.fit().centerCrop()atau .fit().centerInside()tidak berfungsi. Gambar tidak dimuat imageView. tanpa .fit()gambar memuat dengan baik. Saya tidak menggunakan .resize()dalam kedua kasus.
Nishant Bhakta
cara mengubah ukurannya tanpa memotongnya dari sisi mana pun dan juga mempertahankan aspek
Rohit Sharma
1

Dalam beberapa kasus, fit () tidak berguna. Sebelum Anda harus menunggu pengukuran lebar dan tinggi berakhir. Jadi, Anda dapat menggunakan daftar global globayayoutener. sebagai contoh;

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
sumber