0

我有一个相机应用程序。每当设备方向从纵向更改为横向时,反之亦然,我想将 ImageView 动画到他身边。

这是我的代码,动画只在第一组完成,如果方向改变的事件再次发生,什么也不会发生。

这是代码:

  @Override
     public void onSensorChanged(SensorEvent event) {
         if (event.values[1]<6.5 && event.values[1]>-6.5) {
             if (orientation!=1) { // Portrait
                 animation = new RotateAnimation(0,90,RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
                 animation.setFillAfter(true); 
                 animation.setFillEnabled(true);
                 animation.setDuration(0);  
                 imageView.setAnimation(animation);
             }
             orientation=1;
         } else {
             if (orientation!=0) { // Landscape
                 animation = new RotateAnimation(0,270,RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
                 animation.setFillAfter(true); 
                 animation.setFillEnabled(true);
                 animation.setDuration(0);  
                 imageView.setAnimation(animation);
             }
             orientation=0;
         }
     }

为什么会发生这种情况,我如何确保每当发生该事件时,我的动画将与其他旋转参数一起应用于我的 imageView,而不是使用相同的角度?

4

1 回答 1

0

当您使用普通视图动画为视图设置动画时,您只是在为它绘制的位置设置动画。您不会影响其在布局中的实际位置。假设您打算永久更改 View 的位置,则需要在动画完成后更新 View 的布局参数以匹配您与动画所做的移动。

或在动画之后,再次使用正确的布局 xml 执行 setContentView ..

于 2013-08-16T04:00:14.647 回答