Android:旋转ToggleButton时背景可绘制不旋转

时间:2013-09-27 20:55:09

标签: android rotation android-animation togglebutton

我目前正在处理一组带有多个状态背景资源和旋转动画的 ToggleButtons 。一切正常,直到按下切换按钮,发生这种情况:

  1. 当按钮聚焦时,它会重新绘制,但在原始状态下,就像旋转0时一样。
  2. 当释放按钮时,它会尝试使用真值背景重新绘制新背景,但之后会裁剪图像宽度,因为使用原始切换按钮高度作为宽度。
  3. 当按钮再次聚焦时,它会发生与1)相同的问题。
  4. 当释放按钮时,它会正确重新绘制。
  5. 到目前为止,我现在的问题是原始的drawables没有旋转,因此这种行为。我目前的解决方案是为每个旋转使用三个不同的Toggle按钮(90°,0°,-90°),动画和隐藏当前按钮,然后显示新按钮(使用相同的drawable并使用XML旋转它们)标签),但我认为有点麻烦...

    以下是用于90°动画的XML:

    <rotate
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:interpolator="@android:anim/linear_interpolator"
      android:fromDegrees="0"
      android:toDegrees="90"
      android:pivotX="50%"
      android:pivotY="50%"
      android:duration="250"
      android:fillAfter="true"
      android:fillEnabled="true" >
    </rotate>
    

    ToggleButton背景的XML:

    <?xml version="1.0" encoding="utf-8"?>  
    <selector xmlns:android="http://schemas.android.com/apk/res/android">  
     <item android:drawable="@drawable/record_button_on_pressed" 
        android:state_checked="true" android:state_pressed="true"/> 
     <item android:drawable="@drawable/record_button_pressed" android:state_checked="true" 
        android:state_focused="false"/> 
     <item android:drawable="@drawable/record_button_on_press" 
        android:state_checked="false" android:state_pressed="true"/> 
     <item android:drawable="@drawable/record_button" android:state_checked="false"
        android:state_focused="false"/>
    </selector>  
    

    用于旋转视图的代码:

    RotateAnimation rotate = (AnimationUtils.loadAnimation(this, 
        R.anim.rotation90deg);
    startStopRecording.startAnimation(rotate);
    

    希望你们能帮帮我。

1 个答案:

答案 0 :(得分:0)

似乎我使用了错误的方法。预3.0动画不会为当前视图设置动画,但会创建此视图的位图并为其设置动画。所以最后,转换后的视图只是一个图像,这是我得到的行为。

无论如何,通过使用android动画师,我能够旋转并保持按钮旋转(实际视图),因此按钮(按下时)被正确绘制。一个小缺点是你必须放弃所有3.0之前的Android设备。但是,如果您确实需要支持此类版本,则可以使用NineOldAndroid 项目。