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)?

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.

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);
            }
        });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.