코딩스토리

[Android/안드로이드] ImageView에 url 로 이미지 지정하기 본문

Android/유용한 기술

[Android/안드로이드] ImageView에 url 로 이미지 지정하기

라크라꾸 2020. 3. 4. 22:49

앱을 구현할 때 많은 앱들이 많은 양의 이미지를 보여주는 경우가 많습니다. 수많은 양의 이미지를 어플에 리소스파일로 넣어 배포를 하게되면 용량이 어마어마해집니다. 이 문제를 해결하기 위해서는 웹에서 이미지 URL을 가져오는 방법이 있습니다.

보통 ImageView를 사용할 때면 Glide 라이브러리나 Picasso 라이브러리를 사용합니다.

라이브러리를 만들어 배포를 한다던가 따로 커스텀을 하기 위해서 Glide나 Picasso라이브러리를 사용할 수 없을 때가 있습니다. 

그럴 때는 다음과 같은 방법을 통해 ImageView에 http, https형식의 이미지 Url을 지정해줄 수 있습니다.

 

manifests.xml

    <uses-permission android:name="android.permission.INTERNET" />

 

MainActivity.java

    
    public class MainActivity extends AppCompatActivity {
    
        ImageView iv_image;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            iv_image = findViewById(R.id.iv_image);
    
            new DownloadFilesTask().execute("이미지 URL");
        }
    
        private class DownloadFilesTask extends AsyncTask<String,Void, Bitmap> {
            @Override
            protected Bitmap doInBackground(String... strings) {
                Bitmap bmp = null;
                try {
                    String img_url = strings[0]; //url of the image
                    URL url = new URL(img_url);
                    bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return bmp;
            }
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
    
    
            @Override
            protected void onPostExecute(Bitmap result) {
                // doInBackground 에서 받아온 total 값 사용 장소
                iv_image.setImageBitmap(result);
            }
        }
    }
    

 

주의사항

1.  인터넷 관련 작업을 할 때는 인터넷 권한을 허용해줘야합니다.

    <uses-permission android:name="android.permission.INTERNET" />

2. 네트워크 작업을 할때는 Thread나 AsyncTask로 처리해야합니다.

3. Url 이미지를 로드하는 Thread가 작업 할 때(doInBackground()doInBackground(String... strings)) UI관련 기능을 가지고 있는 메인 Thread는 대기를 하고, 완료가 되었을 때(onPostExecuteonPostExecute(Bitmap result))에서 처리해줘야합니다.

 

샘플 자료

https://github.com/lakue119/ImageViewSetUrl

 

lakue119/ImageViewSetUrl

Contribute to lakue119/ImageViewSetUrl development by creating an account on GitHub.

github.com

 

Comments