我目前正在使用一组具有多个状态背景资源和旋转动画的ToggleButtons 。一切正常,直到按下切换按钮,发生这种情况:
- 当按钮获得焦点时,它会重新绘制,但处于原始状态,就像它在旋转 0 时一样。
- 当按钮被释放时,它会尝试使用真值背景重新绘制新背景,但随后图像宽度被裁剪,因为使用原始切换按钮高度作为宽度。
- 当按钮再次聚焦时,它会发生与 1) 相同的问题。
- 释放按钮后,它会正确重绘。
到目前为止,我现在的问题是原始可绘制对象没有旋转,因此出现了这种行为。我目前的解决方案是为每个旋转使用三个不同的切换按钮(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);
希望你们能帮助我。