У меня есть примерно 100 аудиофайлов в исходной папке, в этом 100 файлах только цифры от 1 до 100.
После того, как я нажму кнопку. Я хочу, чтобы он воспроизводил номер в соответствии с текстом, введенным в текстовое поле.
Поэтому я использую для этого звуковой пул и хеш-карту. Это работает отлично, без каких-либо проблем
soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
soundsMap = new HashMap<Integer, Integer>();
soundsMap.put(1, soundPool.load(this, R.raw.number1, 1));
soundsMap.put(2, soundPool.load(this, R.raw.number2, 1));
подобный выше до номер100. Я получаю значение текстового поля
Я поставил цикл for от 1 до 100. Какую ценность будет играть.
используя soundPool.play(1,....)
Это работает отлично, без каких-либо проблем.
Но странная вещь в том, что, поскольку он создает haspmap 100 значений.. есть 5 секунд задержки и с пустым экраном, и я ничего не могу сделать с процессом продолжается.
Есть ли способ просто создать hashmap в соответствии со значением и воспроизводит звук.
Например, скажем, например,
Если текстовое поле имеет значение 20
in the for loop: i=1 to 100..
it should get the value 20:
string a = "R.raw.number"+i
SoundsMap.put(1, soundPool.load(this, a, 1));
soundPool.play(1,....)
если это возможно... Как мне это сделать?
Ожидание вашего ответа! Благодарю!
Зачем инициализировать все в начале? Что делать, если пользователь никогда не нажимает больше нескольких кнопок? Я бы посоветовал загружать на ваш кнопочный щелчок, что-то вроде этого:
//in onCreate()
final EditText editText = (EditText)findViewById(R.id.my_input_field);
int[] sounds = { R.raw.number1, R.raw.number2,
R.raw.number3, /*etc.*/ };
//in your onClick()
try {
Double value = Double.parseDouble(editText.getText());
int soundId = soundPool.load(MyActivity.this, sounds[value - 1], 1);
soundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);
} catch (NumberFormatException e) {
//Alert the user that an invalid number was entered
}
AsyncTask
) и отображать индикатор выполнения во время загрузки. Я не понимаю, для чего вы используете цикл for.if(editText.getText().equals(String.valueOf(i)))
? Nonononno. Разобрать ввод в число и идти оттуда. Проверьте мой пример ниже.