Picasso ile görüntüyü tam genişliğe ve sabit yüksekliğe yeniden boyutlandırma


164

Öğelerden biri ImageViewPicasso kullanılarak yüklenen bir dikey LinearLayout var . Görüntünün genişliğini tam cihaz genişliğine yükseltmem ve görüntünün orta kısmını sabit bir yükseklikte (150dp) kırpmam gerekiyor. Şu anda aşağıdaki kod var:

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

Hangi değerlere koymalıyım screenWidthve imageHeight(= 150dp)?

Yanıtlar:


486

Şunu arıyorsunuz:

.fit().centerCrop()

Bunlar ne anlama geliyor:

  • fit- ölçülene kadar bekleyin ImageViewve görüntüyü boyutuna tam olarak uyacak şekilde yeniden boyutlandırın.
  • centerCrop- en boy oranını karşılayan görüntüyü boyutu doldurana kadar ölçeklendirir. Boyutu tam olarak eşleştirmek için üst ve alt veya sol ve sağa kırpın.

5
İmageView'in yüksekliği ne olmalıdır? İmageView için sabit bir yükseklik istemiyorum. Görüntünün yüksekliğine göre değişmelidir.
Chetna

4
.fit().centerInside()sadece kullanarak hata mesajı .centerInside()ile çöküyordu nerede benim için çalıştı Center inside requires calling resize with positive width and height..
Rock Lee,

@Rock Lee, yeniden boyutlandırmanız gerekiyor: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK

8
.fit().centerCrop()veya .fit().centerInside()çalışmıyor. Resim yüklenmiyor imageView. .fit()görüntü olmadan iyi yükleniyor. Her .resize()iki durumda da kullanmıyorum .
Nishant Bhakta

herhangi bir taraftan kesmeden ve ayrıca yönü koruyarak nasıl yeniden boyutlandırılır
Rohit Sharma

1

Bazı durumlarda fit () işe yaramaz. Genişlik ve yükseklik ölçümünün bitmesini beklemeden önce. Böylece globallayoutlistener kullanabilirsiniz. Örneğin;

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);
            }
        });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.