为什么眨眼动画会停止?

时间:2016-07-07 21:41:51

标签: java multithreading animation

我有一个实现SensorEventListener的类,每次执行方法onSensorChanged(SensorEvent event)时,都会启动一个新的RotateAnimation(它是一个指南针)。

在方法中,我为旋转动画创建AnimationListener(),在侦听器中,每次调用onAnimationStart()时,我都会启动一个闪烁的动画。

这里有两个问题:

  • 每次传感器更改时都会执行闪烁动画(这会调用onAnimationStart()然后执行闪烁),因此闪烁的速度非常快。
  • 如果我强迫眨眼只执行一次(通过使用计数器),我认为它会一直闪烁,因为我将动画设置为INFINITE但它会停止。

我想知道如何在每次传感器更换时传感器线程再次启动时如何保持闪烁。

 @Override
 public void onSensorChanged(SensorEvent event) {
    float degree = Math.round(event.values[0]);

    rotate = new RotateAnimation(
            currentDegree, 
            -degree,
            Animation.RELATIVE_TO_SELF, 0.5f,
            Animation.RELATIVE_TO_SELF,
            0.5f);

    rotate.setDuration(210);
    rotate.setFillAfter(true);

    compass.startAnimation(rotate);

    rotate.setAnimationListener(new Animation.AnimationListener() {

        public void onAnimationStart(Animation animation) {
            // Only enters one time so the blink starts
            // but then the blink stop when a new sensor thread is created
            if (count < 1){
               blink ();
               count++;  
            }
        }
    });
}

public void blink (){
    blink = new AlphaAnimation(1, 0);
    blink.setDuration(400); // duration - half a second
    blink.setRepeatCount(Animation.INFINITE); 
    blink.setRepeatMode(Animation.REVERSE);

    compass.startAnimation(blink);
}

0 个答案:

没有答案