Zmień rozmiar obrazu na pełną szerokość i stałą wysokość za pomocą Picasso

Mam LinearLayout pionowy, gdzie jednym z elementów jest ImageView załadowany za pomocą Picassa. Muszę zwiększyć szerokość obrazu do pełnej szerokości urządzenia i wyświetlić środkową część obrazu przyciętego o stałą wysokość (150dp). Obecnie mam następujący kod:

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

Jakie wartości należy wpisać do screenWidth i imageHeight (=150dp)?

Author: Cassie, 2013-12-29

2 answers

Szukasz:

.fit().centerCrop()

Co to znaczy:

  • fit - poczekaj, aż ImageView zostanie zmierzony i zmień rozmiar obrazu, aby dokładnie pasował do jego rozmiaru.
  • centerCrop - skaluj obraz z zachowaniem proporcji, aż wypełni rozmiar. Przytnij górną i dolną lub lewą i prawą, aby dokładnie dopasować rozmiar.
 491
Author: Jake Wharton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-29 10:22:54

W niektórych przypadkach Fit() jest bezużyteczne. Zanim musisz poczekać na zakończenie pomiaru szerokości i wysokości. Możesz więc użyć globallayoutlistener. na przykład;

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);
            }
        });
 1
Author: Umut ADALI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-05 04:05:45