动画仅在语音识别完成后开始

时间:2014-06-19 19:03:32

标签: android android-animation

我正在编写一个使用Android语音识别功能的应用。

在我的RecognitionListener我有这样的事情:

@Override @TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onRmsChanged(float rmsdB)
{
    if(mSpeakButtonBorder == null) mSpeakButtonBorder = (ImageView) findViewById(R.id.SpeakButtonBorder);
    // Should continue growing in size each time onRmsChanged is called.
    Animation animation = new ScaleAnimation(mSpeakButtonBorder.getScaleX(), mSpeakButtonBorder.getScaleX() + 0.1f, mSpeakButtonBorder.getScaleY(), mSpeakButtonBorder.getScaleY() + 0.1f);
    animation.setDuration(1000);
    animation.setFillAfter(true);
    mSpeakButtonBorder.startAnimation(animation);
}

为什么动画仅在识别返回结果后才开始

1 个答案:

答案 0 :(得分:1)

当语音识别正在进行时,OnRmsChanged()通常会被调用。 由于您已将fillAfter设置为true,并将动画的持续时间设置为1000 ms。

因此,在动画实际完成之前,每次调用OnRmsChanged()(每隔几毫秒或甚至更频繁地调用)时,你就是开始一个新动画。 现在的问题是所应用的变换不适用于视图,它们只是改变它的绘制方式。

我相信动画仍在应用中。只是转换太过分钟而不能注意到,因为持续时间太小而另一个因为目标比例因子非常小。

因此,当您下次使用假设的当前scaleX 时,它实际上会产生与原始(即1.0)相同的值。

您可以使用ObjectAnimator进行动画制作,实际将变换应用于视图或自行计算相对输入比例值,然后输入ScaleAnimation。