0

タイトルは曖昧に見えますが、私の目標は簡単に理解できます。

  • プロジェクトにres/drawable-hdpiの下に一定数の画像があります。

  • 私のアプリでは、サーバーから名前のリストを取得し、それらをローカルデータベースに保存しています。

  • それぞれの名前は、末尾に「.png」が付いた画像の名前に対応しています。

  • 私はGaleryを使用しており、ユーザーは対応する画像をクリックしてデータベースから名前の1つを選択できます。

ここまではすべて大丈夫です。

ただし、ここで、サーバー側に新しい名前が追加されるため、イメージがアプリケーションに存在しないとしましょう。この場合、アプリを更新して、適切な画像を内部に配置する必要があります。

ユーザーがギャラリーに「黒い画像」を表示しないようにするために(画像が存在しないため)、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();
                }

            }
4

1 に答える 1

2

Web サーバーから画像を使用するには、まず画像をデバイスにダウンロードしてから保存する必要があります。

これは、イメージをダウンロードする方法の良い例です。

開発者の Web サイトには、データをデバイスに保存する方法が記載されています。 内部に保存するか、(できれば) SD カードに外部に保存する必要があります。まず、SD カードがデバイスにマウントされ、使用できるかどうかを確認することをお勧めします。SD が利用できない場合は、イメージを内部に保存します。

ダウンロード後、画像の URI を追跡する必要があります。一時的な画像はアプリで簡単に追跡でき、その後すぐに削除できますonDestroy()。永続的なイメージ URI は、、、またはSharedPreferencesのいずれかで保存する必要があります。画像を保存する方法の抽象化レイヤーを追加するため、 Aが推奨されます。とにかく、通常は SQLite データベースに支えられていますが、他のアプリはそれを知る必要はありません。また、必要に応じて、他のアプリケーションが画像に簡単にアクセスできるようにします (ギャラリーなど)。必要に応じて、アクセスを防止できます。画像が数枚しかない場合は、実装が簡単です。ただし、最も推奨されていません。SQLite databaseContentProviderContentProviderSharedPreferences

于 2012-12-17T14:22:32.980 に答える