Как сделать макет для эквалайзера? - PullRequest
0 голосов
/ 11 декабря 2018

Это мой код, который я использую для настройки 5-полосного эквалайзера , но я хотел бы иметь Layout , который поддерживает количество полос эквалайзера, поддерживаемых устройством.

Пока у меня есть в жестком коде размер полос эквалайзера , потому что я не уверен, как создать Layout для непостоянного значенияполос эквалайзера.

Это код, который я хотел бы использовать:

equalizer.getNumberOfBands(); //it tells you the number of equalizer in device.

Но что, если устройство поддерживает +10 полос эквалайзера , как мне разместить эти полосы на экране?

Код для создания эквалайзера

private void setupEqualizer(){

    mEqualizer = new Equalizer(0, mediaPlayer.getAudioSessionId());

    final short lowerEqualizerBandLevel = mEqualizer.getBandLevelRange()[0];
    final short upperEqualizerBandLevel = mEqualizer.getBandLevelRange()[1];

    for (short i = 0; i < 5; i++){
        final short equalizerBandIndex = i;

        int freq_range = mEqualizer.getCenterFreq(equalizerBandIndex);

        verticalSeekbar[i].setMax(upperEqualizerBandLevel - lowerEqualizerBandLevel);
        verticalSeekbar[i].setProgress(mEqualizer.getBandLevel(equalizerBandIndex));

        verticalSeekbar[i].setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
                mEqualizer.setBandLevel(equalizerBandIndex, (short) (progress + lowerEqualizerBandLevel ));
                slider_value[equalizerBandIndex].setText(String.valueOf((progress + lowerEqualizerBandLevel) / 100 + " dB"));
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        slider_labels[i].setText(formatBandLabel(freq_range));

        float scale2 = getResources().getDisplayMetrics().density;
        int dpAsPixels2 = (int) (8*scale2 + 0.5f);

    }
    setupEqSpinner();
}

1 Ответ

0 голосов
/ 11 декабря 2018

Вам необходимо использовать Vertical SeekBar , как сказано Nilesh

equalizer.getNumberOfBands() // it tells the number of equalizer ..

Создать LinearLayout(Horizontal) и добавить V ertical Seekbar к нему в цикле for (numberOfBands) ..

...