본문 바로가기
유용한 소스 모음

[안드로이드 스튜디오] Picasso 라이브러리를 이용해 이미지 다운로드와 표출을 동시에...

by jinu957 2021. 6. 2.
728x90

이번 포스트에서는 Picasso 라이브러리에 대해 적어보도록 하겠습니다.

 

앱을 개발할때 앱 단독으로 실행되게 할수도 있겠지만 대부분 서버와 통신을 하게 되는데 배경이나 썸네일 등과 같은 이미지도 서버에 올려두고 필요할때 내려받아서 표출하는 방식도 많이 사용하게 됩니다.

 

이러한 부분을 구현하려면 서버와 비동기식 통신을 해서 이미지를 다운로드 받고 ImageView 등에 표시하게 되는데 이러한 부분은 한번에 처리해주는 라이브러리로 Picasso라는 것이 있습니다.

 

Picasso를 이용하면 이미지를 다운로드하고 이미지뷰에 보여주는 것을 아주 쉽고 빠르게 처리할 수 있습니다.

특히 HTTP 요청을 자동으로 만들어준다는 큰 장점이 있습니다. 또한 Picasso는 이미지 캐싱도 해주므로 요청을 다시 하는 것을 고민할 필요도 없습니다. 크롭이나 중심 맞추기, 크기 조정 등 이미지와 관련한 어떤 종류의 일이라도 쉽게 할 수 있도록 합니다. 메인 스레드에서 다운로드하지 않도록 처리해주므로 메인 스레드에서 네트워킹을 하면서 발생하는 예외도 걱정할 필요가 없다는 장점이 있습니다.

혹시 RecyclerView를 사용한다면, 어떤 이미지라도 잘 넣어주고 스크린 밖에서 뷰가 재활용될 때는 부착된 이미지도 잘 없애주는 Picasso를 사용해 보세요.

 

이미지를 다운로드하고 표출하는 예로 Stack Overflow에서 찾아 보면 아래와 같은 예제들이 있는데

private Bitmap DownloadImage(String url)
{
    Bitmap bitmap = null;
    InputStream in = null;

    try
    {
        in = OpenHttpGETConnection(url);
        bitmap = BitmapFactory.decodeStream(in); in.close();
    }
    catch (Exception e)
    {
        Log.d("DownloadImage", e.getLocalizedMessage());
    }

    return bitmap;
}

인풋 스트림을 사용해서 무언가를 다운받고, 잘못될 때를 대비해서 try catch를 사용했습니다.

 

하지만 Picasso를 사용하면 아래와 같이 처리하면 됩니다.

Picasso.with(context)
        .load("http://~~~~~ 이미지 URL")
        .into(imageView);

context와 이미지 URL, 이미지를 넣을 imageView를 넘깁니다. context는 getContext() 함수 또는 this 등으로 넘겨주면 되고 URL은 실제 URL이고 다운로드한 이미지를 넣어줄 imageView 변수를 넣어주면 됩니다.

 

문서에 보면 아래와 같은 여러 기능들도 함께 제공합니다.

.placeholder(R.mipmap.loading) //can be a resource or a drawable
.error(R.drawable.sad_taco) //fallback image if error
.fit() //reduce the image size to the dimensions of imageView
.resize(imgWidth, imgHeight) //resizes the image in pixels
.centerCrop() //or .centerInside()
.rotate(90f) //or rotate(degrees, pivotX, pivotY)
.noFade() //don't fade all fancy-like

 

.placeholder : 그림을 실제 다운로드 해주므로 기다리는 동안 보여줄 placeholder 이미지를 설정할 수 있습니다. resource나 앱 로컬의 drawable를 placeholder 이미지로 설정하면 됩니다. 만약

 

.error : 이미지가 다운로드되지 않아서 에러가 발생하면 기본 이미지를 보여줄 수 있습니다.

 

.fit() , .resize : 이미지 뷰의 dimension에 맞게 자동으로 이미지를 맞출 수 있습니다. 혹은 직접 리사이즈할 픽셀을 넣어서 리사이즈할 수도 있습니다.

 

. centerCrop(), .rotate() : 중앙에 맞게 자르거나 중앙에 맞게 넣거나 센터에 맞춰 회전하거나 중앙이 아닌 지점을 기준으로 회전하는 등의 작업을 할 수 있습니다.

 

.noFade() : 이미지를 자동으로 흐릿하게 해줍니다. 만약 이 효과가 싫다면 noFade 옵션으로 제거할 수 있습니다.

 

 

자세한 사항은 홈페이지(https://square.github.io/picasso/)를 참조하시거나  Github (https://github.com/square/picasso) 를 참조하시면 다운로드 및 Gradle에 추가하는 법 등이 자세히 나와있으니 한번 둘러보시기 바랍니다.

 

728x90

'유용한 소스 모음' 카테고리의 다른 글

[안드로이드 스튜디오] 알람 앱 예제  (0) 2020.07.07

댓글