0

我正在为我的 Android 应用程序实现扩展文件。

到目前为止,我已经将几个图像和音频文件放入主扩展文件中(我没有使用补丁扩展文件)。没有任何文件被压缩。

通过该应用程序,我可以下载扩展文件,并毫无问题地播放音频文件。在播放扩展文件中的音频文件的同时,我还显示了扩展文件中的图像。但是,图像比我预期的要小得多。

图像为 320x400 像素。在实现扩展文件之前,它在我的应用程序中按预期显示。但是,实施后,图像看起来缩小到大约 50px 宽(高度按比例缩小)。

然后,我尝试了如何从流中创建可绘制对象而不调整其大小中提供的解决方案。虽然图像确实看起来稍大一些,但它仍然比我想要的要小得多(现在看起来大约是 100x125 像素)。目前,我用于显示图像的代码如下所示:

public void displayImageFromExpansionFile(){
    Bitmap b = BitmapFactory.decodeStream(fileStream);
    b.setDensity(Bitmap.DENSITY_NONE);
    Drawable d = new BitmapDrawable(this.getResources(), b);
    imageToDisplay.setImageDrawable(d);
}

public void showImg(int imgNum){
    switch(imgNum){
        case(1):
            try{
                if((getResources().getConfiguration().screenLayout & 
                        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL){
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for small image");
                }
                else if((getResources().getConfiguration().screenLayout & 
                        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){                       
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for normal image");
                }
                else if((getResources().getConfiguration().screenLayout & 
                        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE){
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for large image");
                }
                else{
                    fileStream = expansionFile.getInputStream("filepath inside expansion file for xlarge image");
                }
                displayImageFromExpansionFile();
            } catch (Exception e) {
                e.printStackTrace();
            }           
            break;
        // more cases here
}

看起来图像仍然没有以其实际大小显示。当我检查扩展文件中的图像时,我可以看到它仍然是 320x400px。但是,应用程序不会以这些尺寸显示图像。

我该怎么做才能让应用程序以正确的尺寸显示图像?

谢谢!

- -更新 - -

我也试过下面的代码,结果没有区别。它看起来仍然是大约 100x125 像素,而不是 320x400 像素,就像它的原始大小一样。

public void displayImageFromExpansionFile(int bWidth, int bHeight){
    BitmapFactory.Options bfo = new BitmapFactory.Options();
    bfo.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap b = BitmapFactory.decodeStream(fileStream, null, bfo);
    b.setDensity(Bitmap.DENSITY_NONE);
    imageToDisplay.setImageBitmap(b);
}

到目前为止唯一有效的是Bitmap.createScaledBitmap(b, bWidth, bHeight, true);

在我的手机上,使用上述方法将图像的原始尺寸加倍(到 640x800 像素)会使图像达到预期尺寸,但我想图像可能会在不同的手机上以不同的尺寸出现(可能是因为屏幕密度/尺寸)。当我尝试将 xlarge 图像尺寸加倍并在平板电脑上查看时,图像看起来比应有的大。

4

2 回答 2

3

最后,我摆弄了显示缩小图像的布局 XML 文件。我像这样更改了 imageView 的属性:

  • 宽度/高度:fill_parent(两者)

  • 比例类型:fitCenter

现在,图像比我最初预期的要大一些,但我认为这样看起来更好。现在图像的大小一致。问题解决了!

如果其他人对我所经历的事情有疑问,希望这会有所帮助。

于 2013-06-12T01:48:10.513 回答
0

那对我有用:

public static Bitmap getBitmapExt(Context context, String name){

    Bitmap bitmap = null;

    try {

        if(expansionFile == null){
            PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, pInfo.versionCode, 0);
        }

        InputStream is = expansionFile.getInputStream("images/" + name + ".png");
        bitmap = BitmapFactory.decodeStream(is);
    }
    catch (Exception e){
        e.printStackTrace();
    }

    return bitmap;
}

https://gist.github.com/uebi-belli/3c07323c8055a3b66ccac0d388b2b013

希望有帮助=)

于 2016-04-19T12:49:01.727 回答