-1

アプリケーションにさまざまな都市の 100 枚の画像があり、これらの画像をさまざまなグループに分けたいと考えています。たとえば、夕方、朝、晴れ、雨などに分けたいと考えています。</p>

R.layout.image_1 を呼び出してレイアウト フォルダーから画像を呼び出すと、android は各画像に対して整数を生成することがわかっています。次に例を示します。

R.layout.image_1 (223344)、R.layout.image_2 (556677)、R.layout.image_3 (778899)、

夕方、朝のフィールドを持つ 1 つのテーブルを作成し、(223344,556677) の整数 ID を使用してそれぞれに写真のグループを割り当てることができ、夕方または朝のグループを呼び出すことができ、これらのグループに関連するすべての画像を表示できます。

私の質問は: Android は毎回同じ番号を生成しますか? これらの数値は固定ですか?アプリケーションが実行されるときはいつでも。

それが本当なら、上のアイデアは私のために働く. この考えが間違っている場合は、アプリケーションで何百もの PNG を処理する適切な方法を教えてください。

4

3 に答える 3

2

それらの数は固定されていません。R は再生成され、何かを変更すると完全に異なる数値になる可能性があります。そのため、ID を比較するときは名前で比較します。

たとえば、代わりに

if (i == 223344)

行う

if (i == R.layout.image_1)

R.layout.image_1は整数 ID を参照するため、名前は変更されません(レイアウト xml 名を変更しない限り)。

リソース ID を (名前を表す文字列によって) 動的に取得したい場合は、このメソッドを確認する必要があります - Resources#getIdentifier().

于 2013-01-18T15:36:42.640 に答える
1

まず、通常は画像をdrawableフォルダーに入れます。

Android は毎回同じ番号を生成しますか?

いいえ。

これらの数値は、アプリケーションが実行されるたびに固定されますか?

はい。

実際、プロジェクトがビルドされると、同じビルドの ID は同じままになります。
つまり、特定の生成された APK ファイルの場合、ID は変更されません。

では、それを利用してリソースをグループ化するにはどうすればよいでしょうか?

ID を保持する静的 int 配列を使用できます。

public static final int[] IMAGES_MORNING = {R.drawable.morning0, R.drawable.morning1, etc};
public static final int[] IMAGES_EVENING = {R.drawable.evening0, R.drawable.evening1, etc};

より構造化された方法は、アプリの最初の起動時にそれらをデータベースに保存することです。


または、A--C の提案を使用することもできます。たとえば、朝の画像のすべての ID を取得するには

for(int i = 0; i < numberOfMorningImages ; i++){
    int id = getResources().getIdentifier("morning" + i, "drawable", getPackageName());
    // do something with the id
}
于 2013-01-18T16:06:37.753 に答える
0

いいえ、整数が毎回同じになるという保証はないため、説明した解決策は機能しません。残念ながら、res/drawable フォルダー内でドローアブルをグループ化する適切な方法はありません。回避策として、assets フォルダー内に保存して、好きなようにグループ化することができます。ただし、Android はこの方法では異なる解像度を処理できません。選択はあなた次第です。お役に立てれば。

于 2013-01-18T15:36:30.103 に答える