是否可以在一个xml文件中定义不同的旋转?

时间:2016-08-27 15:13:20

标签: android xml rotation

我想知道在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?

1 个答案:

答案 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