2014-02-15 66 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