标题似乎很暧昧,但我的目标很容易理解。
我的项目中有一定数量的图片位于res / drawable-hdpi下。
在我的应用中,我正在从服务器中找到一个名单列表,我将它们保存在本地数据库中。
每个名称对应于末尾带有“.png”的图像名称。
我正在使用Galery,用户可以通过点击相应的图像从数据库中选择一个名称。
直到这里一切都很好。
但是现在,假设将在服务器端添加新名称,因此图像将不在应用程序中。在这种情况下,我必须更新我的应用程序并将正确的图像放入其中。
为了避免用户在galery中看到“黑色图像”(因为图像不存在),我想用android创建这个图像。
我实际上能够捕获项目中是否存在图像并创建一个新图像(中间带有名称的白色背景)。
现在,问题在于如何以及在何处存储此新图像。显然,无法将其存储在res / drawable文件夹中。那么,在哪里以及如何存储?
以下是我创建新图片的代码部分:
if (imageId == 0)
{
Bitmap journal_template = BitmapFactory.decodeResource(context.getResources(), R.drawable.journals_template).copy(Bitmap.Config.ARGB_8888, true);
Canvas myCanvas = new Canvas(journal_template);
Paint myPaint = new Paint();
myPaint.setColor(Color.BLACK);
myPaint.setTextSize(25);
String journal_name = publicJournalsNameSystem.get(i).toLowerCase();
Paint textPaint = new Paint();
textPaint.setARGB(200, 254, 0, 0);
textPaint.setTextAlign(Align.CENTER);
int xPos = (myCanvas.getWidth() / 2);
int yPos = (int) ((myCanvas.getHeight() / 2) - ((textPaint.descent() + textPaint.ascent()) / 2)) ;
myCanvas.drawText("Your text", xPos, yPos, myPaint);
try {
FileOutputStream out = new FileOutputStream("/journals_"+journal_name+".png");
journal_template.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
要使用来自网络服务器的图像,您需要先将图像下载到设备上然后存储它。
Here is a good example of how to download the image.
The developer website has methods on how to store data to the device.您要么在内部存储,要么(更优选地)将其存储在SD卡外部。建议您首先检查SD卡是否已安装在设备上并可用。如果SD不可用,请在内部存储图像。
然后,您必须在下载后跟踪图像的URI。可以使用应用跟踪临时图像,然后在onDestroy()
时删除。永久图片URI应通过SharedPreferences
,SQLite database
或ContentProvider
存储。首选ContentProvider
,因为它为您希望存储图像的方式添加了一个抽象层。它通常由SQLite数据库支持,但其他应用程序不需要知道。它还允许其他应用程序轻松访问图像(例如,图库)。如果您愿意,可以阻止访问。如果您只有几张图片,SharedPreferences
会更容易实现。但它是最不值得推荐的。