1

我必须为 Android 2.x 制作一个专用的图像查看器应用程序。

jpeg图像文件太多:大约2000~ jpeg,超过100MB。

我想用它们的文件名访问图像文件,但我找不到这样的例子。

顺便问一下,可以把很多图片文件放在/res/drawable文件夹中吗?

听说安卓应用程序无法安装在 sdcard 和

程序库非常小,因此一般无法安装 100MB 的应用程序。

我在网上找到了一些在 sdcard 上下载大数据文件的示例,

但我无法运行 Web 服务器来托管数据文件,

我必须在 Android Market 上上传完整打包的程序。(我应该建立一个apk文件吗?)

在 Android 中管理太多资源图像(或其他东西)的最佳实践是什么?

4

5 回答 5

2

我认为您将很难说服用户将 100 MB 的程序安装到手机的内部存储器中。将图像侧载到 SD 卡上会更好。有许多相当便宜的文件托管服务可用,例如 Amazon S3。

此外,您应该考虑允许用户以小组而不是一大块的形式下载图像。

于 2010-02-12T01:48:48.903 回答
2

G1 有 256MB 的内部存储空间用于应用程序。即使在 Nexus One 上也只有 512MB,所以我认为任何人都不太可能希望单个应用程序占用如此高比例的存储空间,因此创建 100MB 以上的 .apk 文件是不切实际的。

您说得对,库存的 android 手机无法从 SD 卡运行应用程序。(有允许这样做的自定义固件,但这对您没有帮助,因为只有少数用户运行这些。)

你说你不能运行网络服务器,但不幸的是,我认为这是你唯一真正的选择。您可以根据需要下载图像并将它们缓存在 SD 卡上,如果您将它们放在某处的网络服务器上。配置网络服务器以提供整个图像非常简单,但如果您要收费,您可能需要做一些工作来阻止人们使用网络浏览器而不是您的应用程序查看图像。

于 2010-02-12T06:48:40.467 回答
1
ImageView iv = new ImageView(context);

iv.setImageResource(R.drawable.icon);
于 2010-09-24T06:19:06.387 回答
0

自己没有尝试过,但看起来这可以工作:

public BitmapDrawable(Resources res, String filepath);

https://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html#BitmapDrawable%28android.content.res.Resources,%20java.lang.String%29

于 2010-02-12T00:06:37.580 回答
0

要访问位于 SD 卡目录中的大量图像:

ImageView iv= ...
    int imageIndex=0; //can access all image files by imageIndex, 0=first entry

    List<String> ImageList=FindImages();
    if(ImageList!=null && ImageList.size()>=currentIndex){
         iv.setImageDrawable(Drawable.createFromPath(ImageList.get(imageIndex)));
    }

    //put your image files on SD in DIRECTORY


    private List<String> FindImages() {
    final List<String> tFileList = new ArrayList<String>();
    Resources resources = getResources();
    // may use array of valid image file extensions
    //String[] imageTypes = ...
    FilenameFilter[] filter = new FilenameFilter[imageTypes.length];

    int i = 0;
    /* can use string array of image types:
               for (final String type : imageTypes) {
        filter[i] = new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.endsWith("." + type);
            }
        };
        i++;
    }*/
    filter[i] = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.endsWith(".png");
        }
    };
    FileUtils fileUtils = new FileUtils();
    File[] allMatchingFiles = fileUtils.listFilesAsArray(
            new File(DIRECTORY), filter, -1);
    for (File f : allMatchingFiles) {
        tFileList.add(f.getAbsolutePath());
    }
    return tFileList;
}
于 2011-05-11T14:19:50.370 回答