2

我正在开发适用于 android 的音乐播放器应用程序,并试图找到处理图像的最佳方式。我正在从网络加载艺术家图像,并根据情况从 MediaStore 或网络加载专辑图像。我需要在不同的时间将任意一组图像(艺术家或专辑)添加到 listViews。

将图像存储在内存 (HashTable) 中会使加载速度非常快,但如果用户拥有非常大的音乐库,则可能变得不切实际。

但是我不能在“根据需要”的基础上加载它们,因为我需要将它们绑定到 listView。此外,我有一个显示艺术家图像并提供导航控件的通知。如果我在用户单击下一步按钮时等待加载图像,则它可能不会在通知视图更新之前加载。

在第一次加载时连接到网络然后将文件保存在本地,然后根据需要加载它们的最佳方法是什么?如果我这样做,图像加载速度是否足以跟上用户快速单击下一步按钮并刷新艺术家图像视图的速度?

谢谢,

4

2 回答 2

1

使用列表视图或网格视图来显示图像。

您可以使用https://github.com/nostra13/Android-Universal-Image-Loader Universal Image Loader 从 MediaStore 或网络加载图像。使用缓存。基于延迟加载,但具有更多配置选项。

在您的适配器构造器中

File cacheDir = StorageUtils.getOwnCacheDirectory(a, "UniversalImageLoader/Cache");


 // Get singletone instance of ImageLoader
   imageLoader = ImageLoader.getInstance();
 // Create configuration for ImageLoader (all options are optional)
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
              // You can pass your own memory cache implementation
             .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
             .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
             .enableLogging()
             .build();
 // Initialize ImageLoader with created configuration. Do it once.
    imageLoader.init(config);
    options = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.stub_id)//dummy image
    .cacheInMemory()
    .cacheOnDisc()
    .displayer(new RoundedBitmapDisplayer(20))
    .build();

在你的 getView()

      ImageView image=(ImageView)vi.findViewById(R.id.imageview); 
      imageLoader.displayImage(imageurl, image,options);

您也可以使用https://github.com/thest1/LazyList。还使用缓存。

还可以在 listview 或 grdiview 中使用 ViewHolder。http://developer.android.com/training/improving-layouts/smooth-scrolling.html

于 2013-03-23T07:53:16.423 回答
0

从本地文件存储或MediaStoregetView()您的ListView's ListAdapterSimpleListAdapter. 适配器将只getView()在需要时调用所需的项目position。您的系统将足够快以在需要时以这种方式加载图像。

您必须提前从 Web 获取所有图像并将它们存储在本地文件系统中,以便它们可供ListView.

于 2013-03-23T05:41:19.403 回答