먼저 이미 그렇게 하고 계시겠지만, Glide나 Picasso 같은 이미지 라이브러리를 사용하세요. 이미지 스케일링, 스토리지 체크 등등 네트워크에서 이미지를 다운로드 받거나 큰 이미지를 다룰 때 해야할 일이 많기 때문에 라이브러리를 사용하는게 좋습니다.
그리고 하시려고 하는 의도에 따라, 아래의 옵션들을 적절하게 선택하세요. (먼저, 요구사항을 정확하게 정의해 보세요.)
모든 디바이스에서 xxx dp로 보여주고 싶으신 건지, 화면에 width/height만 꽉차게 보여주고 싶으신건지, 아니면 thumbnail처럼 작은 사이즈로 보여주시려고 하는 건지 등등의 요구사항에 따라 다르게 테스트를 해보시면 될 것 같아요.
화면에 이미지가 원래 원본과 같은 비율로 보이게 하시려면 wrap_width + adjustViewBounds를 사용하세요.
이미지를 특정 사이즈로 보이게 하고 싶으시면 wrap_width 대신에 원하는 크기의 dp를 사용하세요.
필요하다면, minWidth, minHeight, maxWidth, maxHeight 등의 속성을 통해 최소, 최대 이미지 사이즈를 조절하세요.
원본 이미지 자체의 스케일링을 컨트롤 하고 싶으시다면, 위에 있는 stackoverflow의 링크에 있는 코드들을 참조하세요.(예를 들면 폰에서는 원본 이미지가 크고, 태블릿의 경우 이미지가 작아서, 고정 dp를 사용할 수 없고 강제로 스케일업을 할 필요가 있거나 하다면)
마지막의 스케일을 조절하는 방법이 대부분의 경우에도 적용할 수 있는 방법일 거라는 생각이 듭니다. 디바이스 화면크기, 원하는 이미지 크기 등을 고려해서 최적하된 사이즈를 얻을 수 있으니까요.