pinkred's mobile program

pinkred mobile programer

Archive for 9월 2015

[Android] Glide 이미지 라이브러리 사용법

with 2 comments

Glide 라이브러리가 나온지 얼마 되지 않아 사용법이 그리 많지 않아 정리하고자 한다.

물론 아직까지 모든 사용법을 익히지는 못하였으나 필요한 내용은 살펴본것 같다.

Glide라이브러리가 리스트에서 이미지 로딩시에는 정말 부드럽게 움직인다. 중간에 끊김없이 부드럽게 내려가는 것은

어떤 라이브러리보다 훌륭했다. 물로 frsco 라이브러리는 사용해보지 못했다. 용량이 너무 커서 일단 배제하였기 때문이다. ㅜㅜ

기본적인 질문은 이곳에 FAQ가 있다.

  1. Glide 는 RGB_565 가 기본이다. 그래서 이미지를 받을시에 ARGB_8888로 바꾸어야 한다. 그래서 Configuration 에 해당 내용을 추가해야한다.  AndroidManifest.xml에 아래 내용을 추가한다.
<meta-data android:name="com.mypackage.MyGlideModule" android:value="GlideModule" />

그리고 해당 소스에

package com.mypackage;

public class MyGlideModule implements GlideModule {
@Override public void applyOptions(Context context, GlideBuilder builder) {
// Apply options to the builder here.
}

@Override public void registerComponents(Context context, Glide glide) {
// register ModelLoaders here.
}
}
builder.setDecodeFormat(DecodeFormat.ALWAYS_ARGB_8888);

위의 내용을 추가하면 ARGB_8888로 동작한다.

2. Bitmap 파일로 받고 싶은 경우에는 load후에 asBitmap를 추가하면된다.

Glide.with().load().asBitmap()

3. 모든 경우에 마지막에 into() 메소드를 호출해야한다. 그래야지 API가 동작한다.  중간에 listener 메소드를 등록할수는 있으나

into를 호출해야한다.

4. into에 Target을 등록하여 ImageView가 아닌 Bitmap, Drawable을 받을수 있다.

Glide.with(yourApplicationContext))
.load(youUrl)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
// Do something with bitmap here.
}
};
Glide.with(yourFragment)
.load(yourUrl)
.into(new ViewTarget<YourViewClass, GlideDrawable>(yourViewObject) {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation anim) {

// Set your resource on myView and/or start your animation here.
}
});

5. setTag를 사용하기 때문에 소스코드에서 만일 setTag를 사용한다면 수정해야한다.

6. 캐쉬 사용시에 약간의 이슈가 있는데 ImageView 객체가 바뀌면 예를 들어 같은 이미지를 다른 Activity에서 읽어 오려고 하는 경우 캐쉬에 있을 것 같지만 다시 읽어오기 때문에 화면이 빈화면이 나온후에 바뀐다. 같은 화면에서도 ImageView가 바뀌면 다시 읽어온다. 여러가지 방법으로 직접적으로 캐쉬에 접근해서 읽어오려고 했지만 추천하지도 않고 해당 방식을 지원하지 않는다. 관련해서 많은 논의는 있었던것 같다. 파일로 저장해서 읽어 올수는 있다. 할수 있는 방식중에 하나인것 같다.

FutureTarget<File> future = Glide.with(applicationContext)
.load(yourUrl)
.downloadOnly(500, 500);
File cacheFile = future.get();

7. 이미지 캐쉬 때문에 고민이 많았다. 왜냐하면 일반적으로 사용되는 경우에는 이상없이 사용가능하나 빠르게 다음화면에서 이전의 이미지를 보려고 할때 Glide를 사용할 경우 바로 보이는 것이 아니고 약간의 딜레이가 존재하였다. 바로 보여주지 못해서 답답했었는데 파일 Path공유로 이를 해결하였다.

아래와 같이 먼저 다운로드를 한다음에 해당 이미지를 화면에 보여준다.  기존과 화면에 이미지 나오는 속도는 거의 비슷하며 디스크캐쉬파일패스를 이용해서 다음화면에 해당 이미지를 바로보여줄수 있다.


Glide.with(context).load(imageUrl).downloadOnly(new SimpleTarget<File>()
{
@Override
public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation)
{
// file url 저장
}
});

 

아래 사이트에 Glide에 대한 내용이 참 잘되어있다.

https://futurestud.io/blog/tag/glide

 

아직 많이 해보지 않아서 틀린 부분도 많지만 일단 적용하면서 더 내용을 업데이트 할 내용이다.

Written by pinkredmobile

2015/09/30 at 2:22 pm

[Android] Fresco 이미지 라이브러리

with one comment

이미지 라이브러리들은 정말 많이 존재한다. 그중에 특히 많이 쓰이는 몇가지가 있다.

그중에 몇가지 독보적인 존재들이 있는데 Picasso, imageLoader, Fresco, Glide를 비교한질문에

Fresco개발자가 답변한 내용이 있다.

Fresco의 가장 편한점은 우습지만 한글을 지원하는 사이트 이다.

라이브러리 사이즈가 커서 약간 걱정되기는 한다. 라이브러리 연동시에 fresco, drawee, fbcore, imagepipline 의 라이브러리가

같이 설치되며 용량으로는 약 7.5메가 정도 된다. jni를 이용하여 이미지를 직접 관리하여 내는 부분이 독특하다.

일단 페이스북에서 믿고 쓰고 있다고 하니 나도 한번 믿어보고 써볼려고 한다.

Written by pinkredmobile

2015/09/18 at 1:30 pm

프로그램(program)에 게시됨

Tagged with , ,

[Android] Eclipse Project -> Android Studio Project

leave a comment »

이전에 글에 Gradle를 이클립스로 복사해서 사용했는데 프로가드를 실행하니 역시나 구글 플레이 서비스들은

재 컴파일이 되어서 R.txt 파일이 등록되지 않아 최종적으로 실패가 되었다.

결국은 프로젝트를 옮기기로 결심하고 절차에 대해서 간단히 요약한다. 물론 성공했다.  ^^b

1. 대략 구조는 메인 프로젝트 + 프로젝트 라이브러리 + jar라이브러리 + 라이브러리의 라이브러리로 되어있다. 복잡도 하다.

2. Gradle로 될수 있는 라이브러리는 URL을 잘 찾아놓는다.

3. 메인 프로젝트는 중요하기 때문에 Android Studio Project를 새로 만들어서 src, res, manifest 등을

카피해서 넣는다. 이부분은 의외로 쉽다. 메인 프로젝트를 잘알고 있으면 가능하다. 그리고 2번에서 찾아놓은 Gradle 라이브러리를

등록한다. assets폴더가 어려울수 있는데 이는 프로젝트에서 마우스 우측 버튼에 new -> folder에 보면 Assets Folder로 생성시켜서 넣어주면 된다.

4. 라이브러리는 Android Studio에서 New -> import Module를 하면 되는데 이렇게 하면 메인 프로젝에 하위폴더로 카피된다.

5. File -> Project Structure -> Dependencies 를 보면 내가 등록한 프로젝트 라이브러리들의 등록해 줍니다.

6. 내부 라이브러리는 등록하면 gradle에 아래와 같은 방식으로 등록됩니다.

compile project(':library')

7. 빌드 하면 된다.

Written by pinkredmobile

2015/09/14 at 8:52 pm

[Android] Eclipse에서 Gradle 프로젝트 등록

with one comment

Eclipse 작업시에 Google Play Service 라이브러리를 사용하는 경우 용량과 메소드 개수가 너무 많아 문제가 되어

Android Studio에서 사용하는 Gradle 을 사용할수 없을까 생각해보았다.

Google Play Service 에서 사용하는 Gradle Project 이다.

  1. Android Studio 혹은 Ecpise에서 Gradle 프로젝트를 받아서 원하는 폴더를 복사한다.
  2. Eclipse에서 Android Project로 등록한다.
  3. Google Play Service 프로젝트를 보면 jar 폴더가 있는데 libs폴더로 변경하고, classes.jar파일을 원하는 이름으로 수정한다.
  4. 해당 프로젝트를 isLibrary로 체크한다.
  5. Eclipse 본 프로젝트의 위에서 받은 Gradle 프로젝트를 라이브러리로 등록한다.
  6. 유의 사항은 Google Play Service 각각의 라이브러리는 res가 전부 있지 않아 R.txt파일이 루트폴더에있다.  Build 후에 bin폴더에 R.txt파일을 덮어씌운다. 중요하다. 그렇지 않으면 리소스없다고 에러나는 경우가 발생한다.

사용해 보면 역시나 필요한 라이브러리만 사용할수 있어 좋다. 가능하면 Android Studio로 프로젝트를 이전시키는 것이 최상의 방법이지만 어쩔수 없는 경우에 사용하도록 한다. 역시 Build 후에 bin폴더에 R.txt을 덮어씌어주는 것을 잊지 말아야한다.

Written by pinkredmobile

2015/09/03 at 1:58 pm