Picasso를 사용하여 이미지를 전체 너비 및 고정 높이로 크기 조정
항목 중 하나가 ImageView
Picasso를 사용하여로드 되는 세로 LinearLayout이 있습니다 . 이미지의 너비를 전체 장치 너비로 올리고 이미지의 중앙 부분을 고정 된 높이 (150dp)로 표시해야합니다. 현재 다음 코드가 있습니다.
Picasso.with(getActivity())
.load(imageUrl)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(screenWidth, imageHeight)
.centerInside()
.into(imageView);
어떤 값을 입력 screenWidth
하고 imageHeight
(= 150dp)?
당신이 찾고있는:
.fit().centerCrop()
이것이 의미하는 바 :
fit
-ImageView
측정이 끝날 때까지 기다렸다가 크기와 정확히 일치하도록 이미지 크기를 조정하십시오.centerCrop
-이미지가 크기를 채울 때까지 가로 세로 비율에 맞게 이미지의 크기를 조정하십시오. 크기가 정확히 일치하도록 위쪽과 아래쪽 또는 왼쪽과 오른쪽을 자릅니다.
이 블로그에서는 Picasso의 크기 조정 및 맞춤 기능에 대해 자세히 설명합니다 ( https://futurestud.io/tutorials/picasso-image-resizing-scaling-and-fit) .
크기 조정 (x, y)으로 이미지 크기 조정
일반적으로 서버 또는 API가 필요한 정확한 크기로 이미지를 제공하는 것이 가장 좋습니다. 이는 대역폭, 메모리 소비 및 이미지 품질 간의 완벽한 균형입니다.
불행히도, 완벽한 크기의 이미지를 요청하는 것이 항상 통제하는 것은 아닙니다. 이미지의 크기가 이상한 경우 resize (horizontalSize, verticalSize) 호출을 사용하여 이미지의 크기를보다 적합한 크기로 변경할 수 있습니다. ImageView에 이미지를 표시하기 전에 이미지 크기가 조정됩니다.
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.resize(600, 200) // resizes the image to these dimensions (in pixel). does not respect aspect ratio
.into(imageViewResize);
scaleDown () 사용
resize () 옵션을 사용하면 Picasso도 이미지를 업 스케일합니다. 이미지의 품질을 향상시키지 않고 작은 이미지를 더 크게 만드는 것은 컴퓨팅 시간을 낭비 할 수 있으므로 원본 이미지의 크기가 대상 크기보다 큰 경우 scaleDown (true)을 호출하여 resize () 만 적용하십시오.
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.resize(6000, 2000)
.onlyScaleDown() // the image will only be resized if it's bigger than 6000x2000 pixels.
.into(imageViewResizeScaleDown);
스케일링으로 이미지 늘림 방지
이제 이미지 조작과 마찬가지로 이미지 크기를 조정하면 실제로 종횡비가 왜곡되고 이미지 표시가 왜곡 될 수 있습니다. 대부분의 사용 사례에서이 문제가 발생하지 않도록하려고합니다. Picasso에서는 centerCrop () 또는 centerInside ()를 호출하여 두 가지 완화 방법을 선택할 수 있습니다.
CenterCrop
CenterCrop ()은 ImageView의 요청 된 경계를 채우고 추가 이미지를 자르도록 이미지 크기를 조정하는 자르기 기술입니다. ImageView가 완전히 채워지지만 전체 이미지가 표시되지 않을 수 있습니다.
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.resize(600, 200) // resizes the image to these dimensions (in pixel)
.centerCrop()
.into(imageViewResizeCenterCrop);
센터
CenterInside ()는 두 크기가 ImageView의 요청 된 경계와 같거나 작도록 이미지 크기를 조정하는 자르기 기술입니다. 이미지가 완전히 표시되지만 전체 ImageView를 채우지 못할 수 있습니다.
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.resize(600, 200)
.centerInside()
.into(imageViewResizeCenterInside);
마지막으로, Picasso 's fit () 논의 된 옵션은 이미지 크기 조정 및 크기 조정과 관련된 기능에 대한 요구를 충족해야합니다. 피카소의 마지막 도우미 기능 중 하나는 fit ()입니다.
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.fit()
// call .centerInside() or .centerCrop() to avoid a stretched image
.into(imageViewFit);
fit() is measuring the dimensions of the target ImageView and internally uses resize() to reduce the image size to the dimensions of the ImageView. There are two things to know about fit(). First, calling fit() can delay the image request since Picasso will need to wait until the size of the ImageView can be measured. Second, you only can use fit() with an ImageView as the target (we'll look at other targets later).
The advantage is that the image is at the lowest possible resolution, without affecting its quality. A lower resolution means less data to be hold in the cache. This can significantly reduce the impact of images in the memory footprint of your app. In summary, if you prefer a lower memory impact over a little faster loading times, fit() is a great tool.
In some case the fit() is useless. Before you must wait for the width and height measurement to end. So you can use globallayoutlistener. for example;
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);
}
});
'Programing' 카테고리의 다른 글
Python "SyntaxError : 파일의 ASCII가 아닌 문자 '\ xe2'" (0) | 2020.05.31 |
---|---|
sed에서 환경 변수 대체 (0) | 2020.05.31 |
.ToList (), .AsEnumerable (), AsQueryable ()의 차이점은 무엇입니까? (0) | 2020.05.30 |
Angular 2 다른 모듈의 컴포넌트 사용 (0) | 2020.05.30 |
Express에서 멋진 형식의 HTML을 출력하려면 어떻게해야합니까? (0) | 2020.05.30 |