Android 是否可以在xml描述中旋转可绘制文件?
我正在创建一个应用程序,其中包含可以重用的资源(因为按钮总是相同的,但镜像或旋转)。我确实希望使用相同的资源,因此我不必再添加3个与原始资源完全相同但经过旋转的资源。但我也不想将代码与可以在XML中声明的内容混合在一起,也不想用矩阵进行转换,这将耗费处理时间 我在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
<?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
属性的回答很好,它可以很好地旋转向量谢谢!花了这么长时间才找到这个答案!