我正在编写一个使用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);
}
为什么动画仅在识别返回结果后才开始?
答案 0 :(得分:1)
当语音识别正在进行时,OnRmsChanged()通常会被调用。 由于您已将fillAfter设置为true,并将动画的持续时间设置为1000 ms。
因此,在动画实际完成之前,每次调用OnRmsChanged()(每隔几毫秒或甚至更频繁地调用)时,你就是开始一个新动画。 现在的问题是所应用的变换不适用于视图,它们只是改变它的绘制方式。
我相信动画仍在应用中。只是转换太过分钟而不能注意到,因为持续时间太小而另一个因为目标比例因子非常小。
因此,当您下次使用假设的当前scaleX 时,它实际上会产生与原始(即1.0)相同的值。
您可以使用ObjectAnimator进行动画制作,实际将变换应用于视图或自行计算相对输入比例值,然后输入ScaleAnimation。