Thay đổi kích thước hình ảnh thành chiều rộng đầy đủ và chiều cao cố định với Picasso


164

Tôi có một linearLayout dọc trong đó một trong những vật phẩm được ImageViewtải bằng Picasso. Tôi cần tăng chiều rộng của hình ảnh lên toàn bộ chiều rộng của thiết bị và để hiển thị phần giữa của hình ảnh được cắt theo chiều cao cố định (150dp). Tôi hiện có mã sau đây:

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

Những giá trị nào tôi nên đặt vào screenWidthimageHeight(= 150dp)?

Câu trả lời:


486

Bạn đang tìm kiếm:

.fit().centerCrop()

Những điều này có nghĩa là gì:

  • fit- đợi cho đến khi ImageViewđã được đo và thay đổi kích thước hình ảnh để phù hợp với kích thước của nó.
  • centerCrop- chia tỷ lệ hình ảnh tôn vinh tỷ lệ khung hình cho đến khi nó lấp đầy kích thước. Cắt cả trên cùng và dưới cùng hoặc trái và phải để phù hợp với kích thước chính xác.

5
Chiều cao của imageView phải là bao nhiêu? Tôi không muốn một chiều cao cố định cho imageView của tôi. Nó sẽ thay đổi theo chiều cao của hình ảnh.
Chetna

4
.fit().centerInside()làm việc cho tôi khi tôi vừa sử dụng .centerInside()bị lỗi với Center inside requires calling resize with positive width and height.thông báo lỗi.
Rock Lee

@Rock Lee, bạn cần thay đổi kích thước của nó: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK

8
.fit().centerCrop()hoặc .fit().centerInside()không hoạt động. Hình ảnh không được tải vào imageView. không có .fit()hình ảnh đang tải tốt. Tôi không sử dụng .resize()trong cả hai trường hợp.
Nishant Bhakta

Làm thế nào để thay đổi kích thước mà không cắt xén nó từ bất kỳ phía nào và cũng duy trì khía cạnh
Rohit Sharma

1

Trong một số trường hợp, fit () là vô dụng. Trước khi bạn phải đợi cho phép đo chiều rộng và chiều cao kết thúc. Vì vậy, bạn có thể sử dụng globallayoutlistener. ví dụ;

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);
            }
        });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.