如何在不使用"setImageBitmap()"的情况下使用png文件加载ImageView?

Swa*_*yam 6 android android-imageview android-file

我对一个Bitmap对象进行了一些处理(质量改进和一些调整大小),然后bitmap.compress()通过给出一个文件名"myfile.png" 来使用函数存储它.

newbitmap = processImage(bitmap);
FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE);
newbitmap.compress(CompressFormat.PNG, 100, fos);
Run Code Online (Sandbox Code Playgroud)

现在我想加载这个图像,ImageView但我不能用setImageBitmap()它来做.还有其他选择吗?

我无法使用的原因setImageBitmap()是我正在使用RemoteViews一个小部件,并且当图像很大时,使用位图方法会导致Failed Binder Transaction错误.

我尝试使用下面的代码设置图像uri,但图像不会加载到ImageView:

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

File internalFile = context.getFileStreamPath("myfile.png");
Uri internal = Uri.fromFile(internalFile);
rv.setImageViewUri(R.id.widgetImageView, internal);
updateAppWidget(awID, rv);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Shu*_*ham 2

将图像存储在内部存储器中时,您必须将模式设置为 ,MODE_WORLD_READABLE而不是MODE_PRIVATE。这是因为小部件是由主屏幕进程处理的,如果您没有正确设置模式,它就无法访问您的文件。

所以替换这一行:

FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

和:

FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_WORLD_READABLE);
Run Code Online (Sandbox Code Playgroud)

另外,使用Uri.parse()getPath()代替fromFile()fromFile()仅适用于 Android 2.2 及以上版本。

Uri internal = Uri.Parse(internalFile.getPath());
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!