1

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

  1. 当按钮获得焦点时,它会重新绘制,但处于原始状态,就像它在旋转 0 时一样。
  2. 当按钮被释放时,它会尝试使用真值背景重新绘制新背景,但随后图像宽度被裁剪,因为使用原始切换按钮高度作为宽度。
  3. 当按钮再次聚焦时,它会发生与 1) 相同的问题。
  4. 释放按钮后,它会正确重绘。

到目前为止,我现在的问题是原始可绘制对象没有旋转,因此出现了这种行为。我目前的解决方案是为每个旋转使用三个不同的切换按钮(90°、0°、-90°),动画并隐藏当前按钮,然后显示新按钮(使用相同的可绘制对象并使用 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);

希望你们能帮助我。

4

1 回答 1

0

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

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

于 2013-10-05T17:29:16.550 回答