我正在为我的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图像尺寸加倍并在平板电脑上查看时,图像看起来比它应该大。
答案 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
希望有帮助=)