Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以在xml描述中旋转可绘制文件?_Android_Android Layout_Drawable_Android Xml - Fatal编程技术网

Android 是否可以在xml描述中旋转可绘制文件?

Android 是否可以在xml描述中旋转可绘制文件?,android,android-layout,drawable,android-xml,Android,Android Layout,Drawable,Android Xml,我正在创建一个应用程序,其中包含可以重用的资源(因为按钮总是相同的,但镜像或旋转)。我确实希望使用相同的资源,因此我不必再添加3个与原始资源完全相同但经过旋转的资源。但我也不想将代码与可以在XML中声明的内容混合在一起,也不想用矩阵进行转换,这将耗费处理时间 我在XML中声明了一个双状态按钮 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk

我正在创建一个应用程序,其中包含可以重用的资源(因为按钮总是相同的,但镜像或旋转)。我确实希望使用相同的资源,因此我不必再添加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>
我可以使用XML:


我可以在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>

附图片供参考


如果使用基于矢量的绘图,并结合图像视图、样式和颜色状态列表,则可以按如下方式重构按钮:

注意:矢量可绘制文件比图像小得多,因此额外的显式定义不会产生太大的开销,并且可以生成清晰的显式代码(虽然我已经读到应该避免手动修改矢量资源,但我宁愿处理更新两个文件的开销,而不是在一个文件上进行转换):

注意:Android Studio是vector资产的一个很好的来源

res\values\style.xml

<!--ImageView-->
<style name="Details_Buttons_Top_Left_Button">
  <item name="android:layout_width">match_parent</item>
  <item name="android:layout_height">match_parent</item>    
  <item name="android:tint">@color/button_csl</item>    
</style>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
  <item android:state_enabled="false" android:color="@color/grey_disabled"/>
  <item android:state_pressed="true" android:color="@color/orange_hilite"/>
  <item android:color="@color/black"/>  
</selector>
<?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>

匹配父项
匹配父项
@颜色/按钮
res\color\button\u csl.xml

<!--ImageView-->
<style name="Details_Buttons_Top_Left_Button">
  <item name="android:layout_width">match_parent</item>
  <item name="android:layout_height">match_parent</item>    
  <item name="android:tint">@color/button_csl</item>    
</style>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
  <item android:state_enabled="false" android:color="@color/grey_disabled"/>
  <item android:state_pressed="true" android:color="@color/orange_hilite"/>
  <item android:color="@color/black"/>  
</selector>
<?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>

详细信息\u菜单\u大按钮.xml

<!--ImageView-->
<style name="Details_Buttons_Top_Left_Button">
  <item name="android:layout_width">match_parent</item>
  <item name="android:layout_height">match_parent</item>    
  <item name="android:tint">@color/button_csl</item>    
</style>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
  <item android:state_enabled="false" android:color="@color/grey_disabled"/>
  <item android:state_pressed="true" android:color="@color/orange_hilite"/>
  <item android:color="@color/black"/>  
</selector>
<?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>

详细信息\按钮\顶部\左侧\按钮

<ImageView android:id="@+id/Details_Buttons_Top_Left_Button"
           style="@style/Details_Buttons_Top_Left_Button"
           android:src="@drawable/details_menu_large_button" />

和\u card\u details\u button\u down\u left.xml(ic\u play\u arrow\u black\u 24dp.xml)


和\u卡片\u详细信息\u按钮\u向下\u左\u onclick.xml(ic\u播放\u箭头\u黑色\u 24dp.xml修改)


如果您想要
旋转
可在
xml
文件中绘制,那么只需在
图像视图中添加
android:rotation=“180”

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_dropdown"
    android:rotation="180"/>


不用道歉,你的英语很好。欢迎来到SO!在这个线程上寻找相同的问题,任何建议都将是伟大的!基于矢量的绘图工具大大简化了问题(回答如下)。谢谢,这太完美了!我把它和我需要的东西结合在一起,我想发布代码,我不知道编辑你的答案还是我的问题更好。。。为了镜像图像,我必须使用pivot x&y吗?我很高兴能提供帮助,如果您愿意,请编辑答案。pivotX和pivotY定义旋转的中心点。对于镜像,我不知道,因为这个XML只能定义2D旋转。@dmaxi这是通过旋转动画旋转可绘制对象,不是吗?这不是有点低效吗?我做了这个,但是从0到360度,因为我想要一个完整的旋转,问题是在小屏幕上,它旋转变形了,有什么线索吗?Android中有一个bug,影响了这个精确的旋转绘图,它完全消失了,所以如果你选择这个解,那么它将在M中被打破。对于N是固定的。我正在这样做,但我不能设置背景来布局任何想法?对于
rotationGroup
属性的回答很好,它可以很好地旋转向量谢谢!花了这么长时间才找到这个答案!