Android:将矢量图像旋转 90 度
Posted
技术标签:
【中文标题】Android:将矢量图像旋转 90 度【英文标题】:Android : Rotate Vector Image to 90 degree 【发布时间】:2019-07-29 00:29:01 【问题描述】:我的向量有以下代码:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="314.015"
android:viewportHeight="314.015">
<path
android:fillColor="#FCD83500"
android:pathData="M157.007,0C70.291,0 0,70.289 0,157.007c0,86.712 70.29,157.007 157.007,157.007c86.709,0 157.007,-70.295 157.007,-157.007C314.014,70.289 243.716,0 157.007,0zM31.403,157.015c0,-69.373 56.228,-125.613 125.604,-125.613V282.62C87.631,282.62 31.403,226.38 31.403,157.015z" />
</vector>
输出是:
但我希望这个图像在各个方向如下:
我尝试过的:
在<rotate>
之间添加了<vector>
标签,但它给了我类似Element vector is not allowed here
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="90">
<vector
android:
android:
android:viewportWidth="314.015"
android:viewportHeight="314.015">
<path
android:fillColor="#FCD83500"
android:pathData="M157.007,0C70.291,0 0,70.289 0,157.007c0,86.712 70.29,157.007 157.007,157.007c86.709,0 157.007,-70.295 157.007,-157.007C314.014,70.289 243.716,0 157.007,0zM31.403,157.015c0,-69.373 56.228,-125.613 125.604,-125.613V282.62C87.631,282.62 31.403,226.38 31.403,157.015z" />
</vector>
</rotate>
我还尝试将<bitmap>
标签放在<rotate>
之间,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fromDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="90">
<bitmap app:srcCompat="@drawable/ic_round" />
</rotate>
但它给了我 'src' 属性应该被定义,我不能将src
与矢量图像一起使用。
有什么解决方案可以全方位使用这个(一张图片)吗?
注意:我想在
<TextView>
drawable 中使用这张图片。
【问题讨论】:
【参考方案1】:试试这种方式,我在矢量可绘制文件中的图像路径数据之外使用了组标签。
第一种类型:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="314.015"
android:viewportHeight="314.015">
<group
android:translateX="314.015"
android:rotation="90">
<path
android:fillColor="#FCD83500"
android:pathData="M157.007,0C70.291,0 0,70.289 0,157.007c0,86.712 70.29,157.007 157.007,157.007c86.709,0 157.007,-70.295 157.007,-157.007C314.014,70.289 243.716,0 157.007,0zM31.403,157.015c0,-69.373 56.228,-125.613 125.604,-125.613V282.62C87.631,282.62 31.403,226.38 31.403,157.015z" />
</group>
</vector>
第二种类型:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="314.015"
android:viewportHeight="314.015">
<group
android:translateX="314"
android:scaleX="-1"
android:rotation="0">
<path
android:fillColor="#FCD83500"
android:pathData="M157.007,0C70.291,0 0,70.289 0,157.007c0,86.712 70.29,157.007 157.007,157.007c86.709,0 157.007,-70.295 157.007,-157.007C314.014,70.289 243.716,0 157.007,0zM31.403,157.015c0,-69.373 56.228,-125.613 125.604,-125.613V282.62C87.631,282.62 31.403,226.38 31.403,157.015z" />
</group>
</vector>
第三种:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="314.015"
android:viewportHeight="314.015">
<group
android:translateY="314.015"
android:rotation="270">
<path
android:fillColor="#FCD83500"
android:pathData="M157.007,0C70.291,0 0,70.289 0,157.007c0,86.712 70.29,157.007 157.007,157.007c86.709,0 157.007,-70.295 157.007,-157.007C314.014,70.289 243.716,0 157.007,0zM31.403,157.015c0,-69.373 56.228,-125.613 125.604,-125.613V282.62C87.631,282.62 31.403,226.38 31.403,157.015z" />
</group>
</vector>
【讨论】:
@jeevashankar 这三个步骤都有效。但是你能告诉我这个的主要概念吗?因为我需要旋转很多边但不知道如何旋转。 @BhavenShah 它基于不同角度的旋转逻辑,如 [90,0,270,180] @jeevashankar 兄弟,我在哪里可以更详细地了解组和路径?【参考方案2】:对我来说,使用视图中心的pivot
时效果最好。
请注意,我已将其用作 viewport 的中心部分 - 而不是宽度/高度
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="24"
android:viewportHeight="24"
>
<group
android:rotation="45"
android:pivotY="12"
android:pivotX="12"
>
<path
android:fillColor="@android:color/white"
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"
/>
</group>
</vector>
【讨论】:
这个答案对我有用,而不是被接受的答案。非常感谢人 非常感谢..它成功了! 比公认的答案更简洁。谢谢!【参考方案3】:对于那些寻找第四个变体的人来说,把东西倒过来, 代码如下所示:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<group
android:translateY="24.0"
android:scaleY="-1"
android:rotation="0">
<path
android:fillColor="#FF000000"
android:pathData="M1,21h4L5,9L1,9v12zM23,10c0,-1.1 -0.9,-2 -2,-2h-6.31l0.95,-4.57 0.03,-0.32c0,-0.41 -0.17,-0.79 -0.44,-1.06L14.17,1 7.59,7.59C7.22,7.95 7,8.45 7,9v10c0,1.1 0.9,2 2,2h9c0.83,0 1.54,-0.5 1.84,-1.22l3.02,-7.05c0.09,-0.23 0.14,-0.47 0.14,-0.73v-1.91l-0.01,-0.01L23,10z"/>
</group>
</vector>
【讨论】:
【参考方案4】:实际上你不能旋转vector.xml,因为它是由pathData绘制的, 除非你用另一种组合来做。
你可以分开 TextView 和 ImageView 并像这样使用它:
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal">
<TextView
android:layout_
android:layout_
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="Set time"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />
<ImageButton
android:id="@+id/close_dialog"
android:layout_
android:layout_
android:background="?attr/selectableItemBackgroundBorderless"
android:rotation="45"
android:src="@drawable/ic_close_black_24dp" />
</LinearLayout>
【讨论】:
不幸的是,这不是一个解决方案。这是唯一的技巧,它会增加我的代码行数。【参考方案5】:如果想像镜像一样旋转,添加android:scaleY="-1",android:translateY
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:
android:
android:viewportWidth="24"
android:viewportHeight="24">
<group
android:scaleY="-1"
android:translateY="24.0">
<path
android:fillColor="@android:color/transparent"
android:pathData="M12 2L2 12L12 22"
android:strokeWidth="2.5"
android:strokeColor="#ffffff"
android:strokeLineCap="round" />
</group>
</vector>
【讨论】:
以上是关于Android:将矢量图像旋转 90 度的主要内容,如果未能解决你的问题,请参考以下文章