Как добавить Drawable все изображения в массиве в Android программно - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть код, который позволяет мне использовать изображения в папке для рисования, но все изображения хранятся в массиве по имени-

Я хочу загрузить их программно с помощью функции и сохранить их в массиве

это массив:

private int[] theBitmapIds = { R.drawable.elefant_001, R.drawable.elefant_002, R.drawable.elefant_003, R.drawable.elefant_004,
R.drawable.elefant_005, R.drawable.elefant_006, R.drawable.elefant_007,
R.drawable.elefant_008, R.drawable.elefant_009, R.drawable.elefant_010,
R.drawable.elefant_011, R.drawable.elefant_012, R.drawable.elefant_013,
R.drawable.elefant_014, R.drawable.elefant_015, R.drawable.elefant_016,
R.drawable.elefant_017, R.drawable.elefant_018, R.drawable.elefant_019,
R.drawable.elefant_020, R.drawable.elefant_021,R.drawable.elefant_022,
R.drawable.elefant_022, R.drawable.elefant_023,R.drawable.elefant_024,
R.drawable.elefant_025, R.drawable.elefant_026, R.drawable.elefant_027,
R.drawable.elefant_028, R.drawable.elefant_029, R.drawable.elefant_030,
R.drawable.elefant_031, R.drawable.elefant_032, R.drawable.elefant_033,
R.drawable.elefant_034, R.drawable.elefant_035, R.drawable.elefant_036,
R.drawable.elefant_037, R.drawable.elefant_038, R.drawable.elefant_039,
R.drawable.elefant_040};

Я изменил его функцией

public int [] theBitmapIds( ) {
    Field[] ID_Fields = R.drawable.class.getFields();
    int[] theBitmapIds = new int[ID_Fields.length];
    for (int i = 0; i < ID_Fields.length; i++) {
        try {
            theBitmapIds[i] = ID_Fields[i].getInt( null );
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    return  theBitmapIds;
}

private int[] theBitmapIds=theBitmapIds( );

, но когда я вызываю массив в другой функции, в нем все равно ничего нет

public Bitmap getBitmap(int width, int height, int index) {
        Bitmap b = Bitmap.createBitmap(width, height,
                Bitmap.Config.ARGB_8888);
        b.eraseColor(0xFFFFFFFF);
        Canvas c = new Canvas(b);
        Drawable d = getResources().getDrawable(theBitmapIds[index]);

        int margin = 1;
        int border = 1;
        Rect r = new Rect(margin, margin, width - margin, height - margin);

        int imageWidth = r.width() - (border * 2);
        int imageHeight = imageWidth * d.getIntrinsicHeight()
                / d.getIntrinsicWidth();
        if (imageHeight > r.height() - (border * 2)) {
            imageHeight = r.height() - (border * 2);
            imageWidth = imageHeight * d.getIntrinsicWidth()
                    / d.getIntrinsicHeight();
        }

Я в замешательстве, особенно я нуб в Java.Как я могу заставить этот код работать, редактируя функцию или изменяя эту строку кода:

private int[] theBitmapIds=theBitmapIds( );

или

Drawable d = getResources().getDrawable(theBitmapIds[index]);

Кто-нибудь, помогите мне, пожалуйста!

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете использовать AssetManager для прямой загрузки ресурсов с их путями.

Вы можете получить его экземпляр, вызвав context.getAssets().

С его open() метод, вы сможете получить InputStream для этого актива.

Затем вы можете использовать BitmapFactory.decodeStream(), чтобы преобразовать его в Bitmap.

...