Created
May 9, 2016 12:57
-
-
Save ksu3101/f2189cbb31bbda92d8d78371e23f4c19 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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