2014-02-15 3 views
0

이미지를 스크롤하는 프로젝트에서 뷰 페이지를 설정했습니다. 어댑터에서 관리하는 조각에서 뷰 페이지 이미지를 제공하고 있습니다. 이미지는 내 드로어 블 폴더 중 하나에서 저장되거나 URL에서 제공됩니다. 나는 안드로이드의 Volley와 함께 메모리 캐시 (URL)를 사용하여 이미지를 얻고있다. 나는 이미지 스크롤이 두 경우 모두 부진한 것으로 나타났습니다 메인 큐에 그 하중을 의심 문제가 한뷰 페이지 및 비동기 로딩

// case for no xml url's downloaded 
if (url == null) { 
    ImageView image = new ImageView(getSherlockActivity()); 
    image.setImageResource(imageResourceId); 
    image.setScaleType(ScaleType.FIT_XY); 

    layout.addView(image); 
} else { 

    // use volley NetworkImageView 
    NetworkImageView image = new NetworkImageView(getSherlockActivity()); 
    image.setImageUrl(url, ImageCacheManager.getInstance().getImageLoader()); 
    image.setScaleType(ScaleType.FIT_XY); 

    layout.addView(image); 
} 

다음과 같이 조각을 채우는 내 코드입니다. Volley 대신 "Universal Image Loader"를 사용해야합니까? 안드로이드의 비트 맵 재미있는 예제를 살펴 보았지만 복잡성과 URL뿐만 아니라 드로어 블을 처리 할 수있는 능력에 대해 우려하고 있습니다.

미리 도움을 주셔서 감사합니다.

답변

1
@Override 
public Object instantiateItem(View pager, final int position) 
{ 

//Some other work related to instantiation of item  

AsyncTask<Uri, Void, Bitmap> mLoadTask = new AsyncTask<Uri, Void, Bitmap>() {    
//async task for loading images in background 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     pageview[position].setImageBitmap(result);           
     //post in ui thread 
     //this way you have a reference object for each item(using position) 
     //and hence you can start several tasks at the same time    
    } 

    @Override 
    protected Bitmap doInBackground(Uri... params) {   
     Bitmap bitmap=getBitmap(params[0]);  
     //here getBitmap returns the bitmap using uri arguement 
     return bitmap; 
    } 

}; 
mLoadTask.execute(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + image_id)); 
} 

이 원활하게 실행할 각 View 따라서 기본 UI 스레드에 대한 새 스레드를 생성합니다.

+0

답장을 보내 주셔서 감사합니다. 당신은 이미지가 안드로이드의 contentprovider 미디어 저장소에 저장되어 있다고 가정합니다. 내 경우에는 서버에서 이미지를 가져 오는 데 사용되는 URL이 있습니다. 또한보기 호출기가보기를 순환함에 따라 onPostExecute가 실행될 때보기가 이미 사라질 가능성이 있습니다. 가장 좋은 방법은 메모리/디스크 캐시라고 추측합니다. – Jack120

+0

@ Jack120 이것은 비동기 작업 구현에 대한 데모입니다. 내가 원하는 모든 목적을 위해 필요한 수정을 할 수 있다고 확신합니다. 두 번째로,'pageview [position]'은'position' 변수를 사용하여 onPostExecute 중에 유일한 참조가 가능하도록합니다. 따라서 범위를 벗어나더라도 문제가 발생하지 않습니다. – Shakti

+0

나는 이해한다. 하지만 나중에로드 할 때 메모리 캐시에 비트 맵을 가져와야합니다. – Jack120