2017년 12월 5일

안드로이드에서 Glide 를 이용한 GIF 이미지 사용

안드로이드에서 GIF 이미지를 보여주는 가장 쉬운 방법중 하나는 강력한 이미지 로드 도구인 glide 라이브러리를 사용하는 것이다.

환경 설정

참고로 실재 적용한 안드로이드 API 버전이 5.1 인 이유에서 4.x 버전을 사용하지 않고 3.x 버전을 사용하였다.

Gradle 빌드환경에서는 아래와 같이 build.gradle 파일에 의존성을 추가하면 된다.

repositories {
  mavenCentral()
  maven { url 'https://maven.google.com' }
}

dependencies {
    compile 'com.github.bumptech.glide:glide:3.8.0'
}

다운로드한 jar 파일을 사용하여 의존성을 추가하는 경우는 아래와 같이 설정한다. (/lib 경로에 라이브러리가 있는 경우 )

repositories {
  mavenCentral()
  maven { url 'https://maven.google.com' }
}

dependencies {
    compile files('libs/volley.jar')
    compile files('libs/okhttp-2.3.0.jar')
    compile files('libs/okhttp-urlconnection-2.0.0.jar')
    compile files('libs/glide-3.8.0.jar')
}

volley, okhttp-xx 라이브러리는 glide 가 의존성을 갖는 라이브러리이기 때문에 추가하였다.

사용하기

참고로 여기에서는 URL 를 통하여 이미지를 불러오는 대신에 앱에 포함된 이미지를 불러오는 것으로 사용하였다. GIF 이미지를 보여주기 위해서는 아래와 같은 방법으로 원하는 위치의 ImageView에 이미지를 로드하면 된다.
    @Bind(R.id.ivSnowBall)
    ImageView mIvSnowBall;

    protected void onCreate(Bundle savedInstanceState) {
         animateSnowball();
    }

    private void animateSnowball(){
        Glide.with(this).load(R.drawable.snowball_animate).asGif().into(mIvSnowBall);
    }

이경우 최초 이미지 로드시에 상당한 시간의 딜레이가 발생하는 문제에 직면하게 된다. 해당 이슈는 캐쉬 설정을 추가하는 방법으로 해결이 가능하다. (4.x 버전에서는 해당 이슈가 해결되었다고 들었다. )


    @Bind(R.id.ivSnowBall)
    ImageView mIvSnowBall;

    protected void onCreate(Bundle savedInstanceState) {
         animateSnowball();
    }

    private void animateSnowball(){
        Glide.with(this).load(R.drawable.snowball_animate).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mIvSnowBall);
    }

마지막으로 이미지를 로드하는 동안 진행상태를 보여주고자 하는 경우는 아래와 같은 방법으로 구현이 가능하다.

    @Bind(R.id.ivSnowBall)
    ImageView mIvSnowBall;

    protected void onCreate(Bundle savedInstanceState) {
         animateSnowball();
    }

    private void animateSnowball(){
        
        final ProgressBar progressBar = (ProgressBar) findViewById(R.id.snowball_loading_progress);
        progressBar.setVisibility(View.VISIBLE);

        Glide.with(this).load(R.drawable.snowball_animate).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).listener(new RequestListener(){

            @Override
            public boolean onResourceReady(Object o, Object o2, Target target, boolean b, boolean b1) {
                progressBar.setVisibility(View.GONE);
                return false;
            }

            @Override
            public boolean onException(Exception e, Object o, Target target, boolean b) {
                progressBar.setVisibility(View.GONE);
                return false;
            }

        }).into(mIvSnowBall);
    }

참고 layout.xml 파일

   
            
            
            
             



댓글 없음:

댓글 쓰기