我想在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但失败了。
你知道我该如何运作吗?
答案 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
崩溃。
祝你好运,快乐编码。