일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- mysql
- volley
- 구포에서 자전거
- ImageLoad
- spring boot
- image zoom
- laravel
- 안드로이드 이미지 로드
- 창원에서 부산
- 부산에서 창원 자전거
- 자전거
- 낙동강 종주
- httpclient post
- 구포에서 삼량진
- elk stack
- 부산에서 창원
- c언어 구조체
- spring
- 삼량진 자전거
- 자바
- C언어
- 구조체
- android facebook
- NetworkImageView
- 삼량진
- android imageView zoom
- workbench
- 로드바이크
- android ImageLoad
- android loadImage
Archives
- Today
- Total
은근한
Android NetworkImageView (Volley) 본문
첨부파일 있어용!!
안드로이드에서 이미지를 불러 올때 항상 AsyncTask를 써야해서 많은양의
이미지를 올릴때 다소 느린감이 있었는데
얼마전 Google I/O 였나요?? Volley라는 Library 파일이 배포됬다고 합니다.
Volley파일에 NetworkImageView 가 있는데 써보니 이미지 로딩시간이 엄청 단축되네요
혹시나 도움이 될까하고 제가 썼었던 코드를 올려 봅니다.
밑에 스크립트처럼 그대로 생성하셔서 바로 쓸수있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import android.content.Context; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.Volley; public class VolleySingleton { private static VolleySingleton instance; private RequestQueue requestQueue; private ImageLoader imageLoader; private VolleySingleton(Context context) { requestQueue = Volley.newRequestQueue(context); imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>( 20); @Override public void putBitmap(String url, Bitmap bitmap) { // TODO Auto-generated method stub cache.put(url, bitmap); } @Override public Bitmap getBitmap(String url) { // TODO Auto-generated method stub return cache.get(url); } }); } public static VolleySingleton getInstance(Context context) { if (instance == null) { instance = new VolleySingleton(context); } return instance; } public RequestQueue getRequestQueue() { return requestQueue; } public ImageLoader getImageLoader() { return imageLoader; } public <T> void addToRequestQueue(Request<T> req) { req.setTag("App"); getRequestQueue().add(req); } } |
여기있는것만 쓰시면 안되구요~
클래스를 하나 새로 만들어서 아래 코드를 새로 작성합니다!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import android.graphics.Bitmap; import android.support.v4.util.LruCache; import com.android.volley.toolbox.ImageLoader; public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache{ private static int getDefaultLruCacheSize(){ int maxMemory = (int)(Runtime.getRuntime().maxMemory()/1024); int cacheSize = maxMemory /8; return cacheSize; } public BitmapLruCache(){ super(getDefaultLruCacheSize()); } public BitmapLruCache(int maxSize) { super(maxSize); // TODO Auto-generated constructor stub } @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; } @Override public Bitmap getBitmap(String url) { // TODO Auto-generated method stub return get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { // TODO Auto-generated method stub put(url,bitmap); } } |
이렇게 작성하신뒤에 사용법은 엄청 간단 합니다
이미지를 불러올 자바파일에서 클래스 밑에
private ImageLoader mImageLoader;
를 선언해준뒤에
이미지를 부를 메소드안에
mImageLoader = VolleySingleton.getInstance(activity).getImageLoader();
(변수) = (VolleySingleton은 클래스 명입니다.)
라고 적어줍니다.
레이아웃에 NewtworImageView를 쓰는데 해당하는 id를 가져옵니다.
NetworkImageView pv = (NetworkImageView)convertView.findViewById(R.id.profile_image);
전 아답터에서 썼기에 convertView로 view가 정의 되어서 위의 처럼 썼습니다.
그냥 findViewById하셔도 무난합니다.
그리고 아래의 코드를 추가
pv.setImageUrl("url주소!!", mImageLoader);
setIamgeUrl에서 첫번째 파라미터는 url주소 두번째는 아까 선언한 mImageLoader를 넣어주시면됩니다. ㅎㅎ
이렇게 하면 실행시 이미지를 바로바로 불러오는 NetworkimageView가 만들어 집니다.
혹시 궁금하신 사항 있으시면 댓글남겨주세요~