2

我的 ChordActivity 应用程序在 LinearLayout 中有一组按钮。单击按钮时,我希望 TextToSpeech 引擎说出单击的按钮的名称(例如 Minor 7th ),这工作正常。我还希望出现“弹出然后返回”按钮的动画,我也有这个动画。问题是,无论我如何安排代码,语音都是先发生的,然后是动画。我希望它们同时发生。我知道 TextToSpeech 有自己的消息队列,所以我假设如果我使用 runnable 来制作动画,我可以让语音和动画同时发生,但事实并非如此。然后我退出了可运行文件,现在有以下代码。有人对此有解决方案吗?非常感激。

private void speakChordMessage(View v) {
        image = (ImageView) v;
        image.startAnimation(animScale);
        chordTTS.playSilence(2000, TextToSpeech.QUEUE_FLUSH, null);
        chordTTS.speak(str1, TextToSpeech.QUEUE_FLUSH, null);
        while (chordTTS.isSpeaking()) {
        }
    }

animscale.xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" >
    <scale
        android:duration="200"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="100%"
        android:pivotY="0%"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:startOffset="0"
        android:toXScale="1.3"
        android:toYScale="1.25" />
</set>
4

1 回答 1

1

如果您在调用 startAnimation 之前将AnimationListener添加到动画,您将有一个回调

public void onAnimationStart(Animation animation){}

动画与 TextToSpeech 引擎并不完全不同,它被添加到队列系统中并且不会立即执行。如果您在 onAnimationStart() 中调用 chordTTS.speak(),它应该会大大减少您看到的延迟。从那里开始,您可能需要尝试一些小的延迟来达到预期的效果。

于 2013-03-28T17:08:07.777 回答