我想知道在xml文件中是否可以在Android中进行两种不同类型的旋转,例如:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:duration="2000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"></rotate>
<rotate2
android:fromDegrees="0"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%"
android:duration="0" ></rotate2>
</set>
第一次旋转我用它来旋转imageView:
final ImageView iv = (ImageView) findViewById(R.id.imageView);
final Animation an = AnimationUtils.loadAnimation(getBaseContext(),R.anim.rotate);
我想使用第二个旋转(rotate2)来旋转ImageButton中的文本这是可能的还是没有?
当我尝试在我的java类中获取rotate2时,我得到一个错误,所以我的问题是,如果我必须解决这个问题的唯一方法是在另一个xml文件中创建rotate2?
答案 0 :(得分:0)
您收到错误,因为<rotate2>
不是<set>
元素的有效子元素。有效元素是<alpha>
,<scale>
,<translate>
,<rotate>
或<set>
元素,其中包含一组(或多组)其他动画元素(甚至是嵌套的<set>
元素)[1]。
以下内容应该有效:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:duration="2000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"/>
<rotate
android:fromDegrees="0"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%"
android:duration="0" />
</set>
修改强>
如果要使用不同的动画为不同的视图设置动画,则需要指定单独的动画资源文件,并为需要设置动画的每个视图单独加载它们。
rotate1.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:duration="2000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
rotate2.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%"
android:duration="0" />
</set>
在Java代码中,你应该拥有我在下面的内容。 rotate2
会为imageButton
设置动画,而不是它的内容。
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Animation rotate1 = AnimationUtils.loadAnimation(getBaseContext(), R.anim.rotate1);
imageView.startAnimation(rotate1);
ImageButton imageButton = (ImageButton) findViewById(R.id.imageButton);
Animation rotate2 = AnimationUtils.loadAnimation(getBaseContext(), R.anim.rotate2);
imageButton.startAnimation(rotate2);
为了旋转ImageButton
内的文字,我建议编写一个自定义视图,扩展ImageButton
类并在ImageButton
中旋转onDraw()
的画布。您还必须覆盖onMeasure()
[2]。有关创建自定义视图的更详细指南,请参阅Android docs。