Анимация текста на пишущей машинке - как воспроизводить звук, пока не закончится анимация? - PullRequest
0 голосов
/ 06 мая 2019

Я работаю над приложением Android, которое показывает произвольную текстовую строку из ArrayList и воспроизводит короткий аудиоклип с помощью MediaPlayer, по нажатию кнопки.Текст отображается в анимации, которая имитирует пишущую машинку (каждый символ добавляется один за другим с задержкой).

В настоящее время аудиоклип воспроизводится только один раз при нажатии, и я ищу способ сохранить звукцикл до завершения анимации текста.

Мне не удалось найти метод, который позволил бы мне определить, когда были добавлены все строковые символы, и соответствующим образом остановить зацикливание звука.

Моя пишущая машинкамодель, которая обеспечивает анимацию:

public class TypeWriter extends android.support.v7.widget.AppCompatTextView {

private CharSequence mText;
private int mIndex;
private long mDelay = 150; // in ms

public TypeWriter(Context context) {
    super(context);
}

public TypeWriter(Context context, AttributeSet attrs) {
    super(context, attrs);
}

private Handler mHandler = new Handler();

private Runnable characterAdder = new Runnable() {

    @Override
    public void run() {
        setText(mText.subSequence(0, mIndex++));

        if (mIndex <= mText.length()) {
            mHandler.postDelayed(characterAdder, mDelay);
        }
    }
};

public void animateText(CharSequence txt) {
    mText = txt;
    mIndex = 0;

    setText("");
    mHandler.removeCallbacks(characterAdder);
    mHandler.postDelayed(characterAdder, mDelay);
}

public void setCharacterDelay(long m) {
    mDelay = m;
}
}

Мой onClick:

            // Start MediaPlayer
            mp.start();
            mp.setLooping(true);

            // Get string from ArrayList
            Random randomNumber = new Random();
            selector = randomNumber.nextInt(176);
            // Typewriter animation
            tvQuote.setText("");
            tvQuote.setCharacterDelay(40);
            tvQuote.animateText(listOfQuotes.get(selector));
            mp.release();

У кого-нибудь есть предложения, как это осуществить?Заранее спасибо.

...