Skip to content

Instantly share code, notes, and snippets.

@ksu3101
Created May 9, 2016 12:57
Show Gist options
  • Save ksu3101/f2189cbb31bbda92d8d78371e23f4c19 to your computer and use it in GitHub Desktop.
Save ksu3101/f2189cbb31bbda92d8d78371e23f4c19 to your computer and use it in GitHub Desktop.
/**
* ImageUtils
*
* @author KangSung-Woo
* @since 2015/10/23
*/
public class ImageUtils {
public static final int DEFAULT_TRANSITION_DRATION = 150;
private static final String TAG = ImageUtils.class.getSimpleName();
/**
* Volley imageloader를 통해서 웹으로부터 이미지를 비동기로 불러 오고 배경으로 설정 한다.
*
* @param imageLoader Volley ImageLoader instance.
* @param view 이미지를 배경으로 설정할 View.
* @param imgUrl 불러올 이미지가 존재하는 url.
*/
public static void loadImage(
ImageLoader imageLoader,
final View view,
final String imgUrl
) {
loadImage(imageLoader, view, imgUrl, 0, 0, 0, true, DEFAULT_TRANSITION_DRATION, null);
}
/**
* Volley imageloader를 통해서 웹으로부터 이미지를 비동기로 불러 오고 배경으로 설정 한다.
*
* @param imageLoader Volley ImageLoader instance.
* @param view 이미지를 배경으로 설정할 View.
* @param imgUrl 불러올 이미지가 존재하는 url.
* @param listener 이미지 로드 완료 콜백을 구현한 객체.
*/
public static void loadImage(
ImageLoader imageLoader,
final View view,
final String imgUrl,
final ViklImageView.OnImageLoadListener listener
) {
loadImage(imageLoader, view, imgUrl, 0, 0, 0, true, DEFAULT_TRANSITION_DRATION, listener);
}
/**
* Volley imageloader를 통해서 웹으로부터 이미지를 비동기로 불러 오고 배경으로 설정 한다.
*
* @param imageLoader Volley ImageLoader instance.
* @param view 이미지를 배경으로 설정할 View.
* @param imgUrl 불러올 이미지가 존재하는 url.
* @param enableTransition 이미지 로드 완료 후 트랜지션 효과와 함께 등장하게 한다.
* @param transitionDuration 이미지 로드 완료 후 트랜지션 효과를 적용 할 때 duration을 설정 한다.
* @param listener 이미지 로드 완료 콜백을 구현한 객체.
*/
public static void loadImage(
ImageLoader imageLoader,
final View view,
final String imgUrl,
final boolean enableTransition,
final int transitionDuration,
final ViklImageView.OnImageLoadListener listener
) {
loadImage(imageLoader, view, imgUrl, 0, 0, 0, enableTransition, transitionDuration, listener);
}
/**
* Volley imageloader를 통해서 웹으로부터 이미지를 비동기로 불러 오고 배경으로 설정 한다.
*
* @param imageLoader Volley ImageLoader instance.
* @param view 이미지를 배경으로 설정할 View.
* @param imgUrl 불러올 이미지가 존재하는 url.
* @param defaultImgResId 로딩 후 기본 설정 이미지. 0일 경우 설정 하지 않는다.
* @param errorImgResId 이미지 로드 실패 시 설정 이미지. 0일 경우 설정 하지 않는다.
* @param listener 이미지 로드 완료 콜백을 구현한 객체.
*/
public static void loadImage(
ImageLoader imageLoader,
final View view,
final String imgUrl,
final int defaultImgResId,
final int errorImgResId,
final ViklImageView.OnImageLoadListener listener
) {
loadImage(imageLoader, view, imgUrl, 0, defaultImgResId, errorImgResId, true, DEFAULT_TRANSITION_DRATION, listener);
}
/**
* Volley imageloader를 통해서 웹으로부터 이미지를 비동기로 불러 오고 배경으로 설정 한다.
*
* @param imageLoader Volley ImageLoader instance.
* @param view 이미지를 배경으로 설정할 View.
* @param imgUrl 불러올 이미지가 존재하는 url.
* @param defaultImgResId 로딩 후 기본 설정 이미지. 0일 경우 설정 하지 않는다.
* @param errorImgResId 이미지 로드 실패 시 설정 이미지. 0일 경우 설정 하지 않는다.
* @param enableTransition 이미지 로드 완료 후 트랜지션 효과와 함께 등장하게 한다.
* @param transitionDuration 이미지 로드 완료 후 트랜지션 효과를 적용 할 때 duration을 설정 한다.
* @param listener 이미지 로드 완료 콜백을 구현한 객체.
*/
public static void loadImage(
ImageLoader imageLoader,
final View view,
final String imgUrl,
final int defaultImgResId,
final int errorImgResId,
final boolean enableTransition,
final int transitionDuration,
final ViklImageView.OnImageLoadListener listener
) {
loadImage(imageLoader, view, imgUrl, 0, defaultImgResId, errorImgResId, enableTransition, transitionDuration, listener);
}
/**
* Volley imageloader를 통해서 웹으로부터 이미지를 비동기로 불러 오고 배경으로 설정 한다.
*
* @param imageLoader Volley ImageLoader instance.
* @param view 이미지를 배경으로 설정할 View.
* @param imgUrl 불러올 이미지가 존재하는 url.
* @param loadingImgResId 로딩중 이미지. 0일 경우 설정 하지 않는다.
* @param defaultImgResId 로딩 후 기본 설정 이미지. 0일 경우 설정 하지 않는다.
* @param errorImgResId 이미지 로드 실패 시 설정 이미지. 0일 경우 설정 하지 않는다.
* @param enableTransition 이미지 로드 완료 후 트랜지션 효과와 함께 등장하게 한다.
* @param transitionDuration 이미지 로드 완료 후 트랜지션 효과를 적용 할 때 duration을 설정 한다.
* @param listener 이미지 로드 완료 콜백을 구현한 객체.
*/
public static void loadImage(
ImageLoader imageLoader,
final View view,
final String imgUrl,
final int loadingImgResId,
final int defaultImgResId,
final int errorImgResId,
final boolean enableTransition,
final int transitionDuration,
final ViklImageView.OnImageLoadListener listener
) {
if (imageLoader != null && view != null) {
if (TextUtils.isEmpty(imgUrl)) {
// 로딩중 이미지 설정.
if (loadingImgResId != 0) {
if (view instanceof ImageView) {
((ImageView) view).setImageResource(loadingImgResId);
}
else {
view.setBackgroundResource(loadingImgResId);
}
}
if (listener != null) listener.onStart(view);
imageLoader.get(
imgUrl,
new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
Bitmap bmp = response.getBitmap();
if (bmp != null) {
// 이미지 로드 완료.
if (enableTransition) {
startTransitionEffect(
view,
bmp,
transitionDuration
);
}
else {
if (view instanceof ImageView) {
((ImageView) view).setImageBitmap(bmp);
}
else {
view.setBackgroundDrawable(new BitmapDrawable(bmp));
}
}
}
else {
// http통신은 끝냈지만 이미지가 없거나 찾을 수 없음 -> 기본 이미지 설정.
if (enableTransition) {
if (defaultImgResId != 0) {
startTransitionEffect(
view,
BitmapFactory.decodeResource(view.getResources(), defaultImgResId),
transitionDuration
);
}
}
else {
if (defaultImgResId != 0) {
if (view instanceof ImageView) {
((ImageView) view).setImageResource(defaultImgResId);
}
else {
view.setBackgroundResource(defaultImgResId);
}
}
}
}
if (listener != null) {
listener.onComplete(view);
}
}
@Override
public void onErrorResponse(VolleyError error) {
// 이미지 로드 실패.
Log.w(TAG, imgUrl + " 이미지를 불러오는데 실패 했습니다.");
if (enableTransition) {
if (errorImgResId != 0) {
startTransitionEffect(
view,
BitmapFactory.decodeResource(view.getResources(), errorImgResId),
DEFAULT_TRANSITION_DRATION
);
}
}
else {
if (errorImgResId != 0) {
if (view instanceof ImageView) {
((ImageView) view).setImageResource(errorImgResId);
}
else {
view.setBackgroundResource(errorImgResId);
}
}
}
if (listener != null) {
listener.onError(view, error);
}
}
}// ImageListener implemention
);
}
}
}
/**
* 어떠한 View에 적용된 Drawable이나 color, 등으로부터 새로운 Bitmap으로 트랜지션 호과를 적용한다.
* 설정된 Drawable이나 color가 없을 경우 Color.Black으로부터 전환 효과가 적용 된다.
* <p/>
* ImageView를 상속한 모든 뷰 들은 src를 설정한다. 그 외의 View들은 background를 설정 한다.
*
* @param view Transition효과가 적용될 View.
* @param newBitmap 전환되어질 이미지 비트맵.
* @param duration 전환 되어질 시간.
*/
private static void startTransitionEffect(View view, Bitmap newBitmap, int duration) {
if (view != null && newBitmap != null) {
view.clearAnimation();
final Drawable beforeDrawable = view.getBackground();
final TransitionDrawable transitionDrawable =
Utils.createTransitionDrawable(
beforeDrawable == null ?
new ColorDrawable(Color.BLACK) : beforeDrawable,
new BitmapDrawable(newBitmap)
);
if (transitionDrawable != null) {
if (view instanceof ImageView) {
((ImageView) view).setImageDrawable(transitionDrawable);
}
else {
view.setBackgroundDrawable(transitionDrawable);
}
transitionDrawable.startTransition(duration);
}
else {
if (view instanceof ImageView) {
((ImageView) view).setImageDrawable(transitionDrawable);
}
else {
view.setBackgroundDrawable(new BitmapDrawable(newBitmap));
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment