可以在XML描述中旋转可绘制的图形吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

我正在创建一个应用程序,资源可以重用(因为按钮总是相同的,但镜像或旋转)。我确实想使用相同的资源,所以我不需要再添加3个与原始资源完全相同但经过旋转的资源。但是,我也不想将代码与XML中可以声明的内容混合在一起,也不希望使用一个需要花费处理时间的矩阵进行转换。

我在XML中声明了两个状态按钮。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/and_card_details_button_down_left_onclick" /> <!-- pressed -->
    <item android:drawable="@drawable/and_card_details_button_down_left" /> <!-- default -->
</selector>

我想再使用这个绘图,因为它将是相同的,但旋转的90和45,我指定按钮作为一个可绘图。

<Button android:id="@+id/Details_Buttons_Top_Left_Button"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/details_menu_large_button" />

在XML上可以直接实现这一点吗?或者您认为这是最好的方法吗?把所有的资源,但旋转,在代码中旋转吗?

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <rotate 
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:drawable="@drawable/and_card_details_button_up_onclick"/>
    </item>

    <item>
        <rotate
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:drawable="@drawable/and_card_details_button_up_onclick"/>
    </item>

</selector>
提问于
用户回答回答于

我可以在XML中rotate

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
        android:fromDegrees="90"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:drawable="@drawable/mainmenu_background">
</rotate>

fromDegrees很重要。

基本上,这是用XML定义的旋转动画。带着fromDegrees定义初始旋转状态。toDegrees是动画序列中可绘制的最终旋转状态,但如果不想使用动画,则可以是任何内容。

我不认为它为动画分配资源,因为它不需要作为动画加载。作为一个可绘制的,它被呈现为它的初始状态,并且应该放在drawable资源文件夹。要将它用作动画,您应该将其放入anim资源文件夹并可以像这样启动动画(仅举一个例子):

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation);
rotation.setRepeatCount(Animation.INFINITE);
myView.startAnimation(rotation);
用户回答回答于

我可以在XML中右转左箭头,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="180"
    android:toDegrees="0"
    android:drawable="@drawable/left">
</rotate>

附图供参考。

扫码关注云+社区