2014-02-15 98 views
0

我在我的項目中設置了一個viewpager滾動圖像。我正在從由適配器管理的片段提供viewpager圖像。這些圖像要麼存儲,要麼來自我的可繪製文件夾,要麼來自網址。我一直在使用Android的Volley以及內存緩存來從網絡中獲取圖像(url)。我的代碼來填充片段如下:viewpager和異步加載

// 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); 
} 

我發現,在圖像滾動是在兩種情況下呆滯,並懷疑在主隊列中加載的問題。我應該使用「Universal Image Loader」而不是Volley嗎?我已經看過Android的位圖有趣的例子,但我擔心複雜性,它能夠處理URL和drawable。

在此先感謝您的幫助。

回答

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

感謝您的回覆。你回答假設圖像存儲在android的contentprovider媒體商店。在我的情況下,我有用於從服務器上拉下圖像的網址。另外,當視圖尋呼機在視圖中循環時,onPostExecute運行時視圖已經消失。我猜測最好的方法是內存/磁盤緩存。 – Jack120

+0

@ Jack120這僅僅是異步任務實現的演示。我相信您可以進行必要的修改,以達到您希望的目的。其次,'pageview [position]'確保''onPostExecute''期間使用'position'變量提供唯一的引用。所以,即使它超出了範圍,你也不會遇到任何問題。 – Shakti

+0

我明白了。但我仍然需要將位圖存入內存緩存中以備將來加載。 – Jack120