MediaPlayer在Android中播放声音时如何突出显示文字?

时间:2012-07-26 10:10:16

标签: android text media-player highlight

我想在TextView中突出显示文本,因为MediaPlayer播放预先录制的文本声音。 (就像卡拉OK一样)现在,我只想在声音的开头和声音结尾的所有文字中都不要覆盖。 (我突出显示的文字看起来应该像进度条。)

我尝试了MediaPlayer对象的isPlaying()方法,获取文本索引,我计算了百分比。

我的代码如下。

while(mediaPlayer.isPlaying())
{
  int percentage = mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration() * 100;
  int end = text.length() * percentage / 100;
  story.setText("Hello world!", BufferType.SPANNABLE);
  Spannable span = new SpannableString(story.getText());
  text = story.getText().toString();
  span.setSpan(new BackgroundColorSpan(0xFF00FF00), 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  story.setText(span);
}

这似乎阻止了线程,因为我的应用程序冻结了。我尝试使用AsyncTask但失败了。

你知道我该如何运作吗?

1 个答案:

答案 0 :(得分:0)

这可能为时已晚,无法回答,但后来优于永远,您可以使用Handler和方法Handler#postDelay来实现这一目标

 private val runnable = object : Runnable {
    override fun run() {
        val string = textView.text.toString()
        val span = SpannableString(string)
        val end = textView.length() * percentage / 1000
        span.setSpan(BackgroundColorSpan(Color.RED), 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
        textView.clearFocus()
        textView.setTextKeepState(span)
        percentage += 1 // to make the percentage increases, you can remove it
        handler.postDelayed(this, 1000)
    }

}

并在任何地方调用此方法

 handler.postDelayed(runnable, 1000)
  

离开活动时不要忘记清除回调handler.removeCallbacks(runnable) ,否则会泄漏资源。

     

当百分比达到100%时,请不要忘记停止删除回调,否则这将永久运行或只是NullPointerException崩溃。

祝你好运,快乐编码。