Android扩展文件中的图片显得太小

时间:2013-06-04 22:13:04

标签: android android-drawable apk-expansion-files expansion-files

我正在为我的Android应用实施扩展文件。

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

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

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

然后我尝试了How to create a drawable from a stream without resizing it中提供的解决方案。虽然图像看起来确实略大,但它仍然比我想要的要小得多(看起来现在大约是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。但是,应用程序未在这些维度上显示图像。

如何让应用以正确的尺寸显示图像?

谢谢!

--- --- UPDATE

我也尝试过以下代码,结果没有区别。它看起来仍然是大约100x125px,而不是320x400px,就像它的原始尺寸一样。

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图像尺寸加倍并在平板电脑上查看时,图像看起来比它应该大。

2 个答案:

答案 0 :(得分:3)

最后,我摆弄了显示缩小图像的布局XML文件。我改变了imageView的属性,如下所示:

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

  • 比例类型:fitCenter

现在,图像略大于我最初的预期,但我认为这样看起来更好。现在图像尺寸一致。问题解决了!

如果其他人遇到我遇到的问题,希望这会有所帮助。

答案 1 :(得分: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

希望有帮助=)