2

LinearLayout の ChordActivity アプリケーションに一連のボタンがあります。ボタンがクリックされると、TextToSpeech エンジンがクリックされたボタンの名前 (例: Minor 7th ) を読み上げるようにします。これは正常に動作しています。また、「飛び出してから戻る」ボタンのアニメーションを発生させたいと思っています。これも機能しています。問題は、コードをどのように配置しても、スピーチが最初に発生し、その後にアニメーションが発生することです。同時に実現してほしい。TextToSpeech には独自のメッセージ キューがあることがわかっているので、ランナブルを使用してアニメーションを実行すれば、音声とアニメーションを同時に実行できると思いましたが、そうではありませんでした。その後、ランナブルをバックアウトしたところ、次のコードが作成されました。誰かがこれに対する解決策を持っていますか? とても有難い。

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 に答える