【问题标题】:Android : Rotate Vector Image to 90 degreeAndroid:将矢量图像旋转 90 度
【发布时间】:2019-07-29 00:29:01
【问题描述】:

我的向量有以下代码:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"

    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>

输出是:

但我希望这个图像在各个方向如下:

我尝试过的:

&lt;rotate&gt; 之间添加了&lt;vector&gt; 标签,但它给了我类似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:width="24dp"
        android:height="24dp"

        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>

我还尝试将&lt;bitmap&gt; 标签放在&lt;rotate&gt; 之间,如下所示:

<?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 与矢量图像一起使用。

有什么解决方案可以全方位使用这个(一张图片)吗?

注意:我想在&lt;TextView&gt;drawable 中使用这张图片。

【问题讨论】:

    标签: android vector rotation drawable


    【解决方案1】:

    试试这种方式,我在矢量可绘制文件中的图像路径数据之外使用了组标签。

    第一种类型:

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    
    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:width="24dp"
    android:height="24dp"
    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:width="24dp"
    android:height="24dp"
    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:width="36dp"
        android:height="36dp"
        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:width="24dp"
      android:height="24dp"
      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_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal">
      
              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  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_width="?attr/actionBarSize"
                  android:layout_height="?attr/actionBarSize"
                  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:width="24dp"
       android:height="24dp"
       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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        • 2020-07-06
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多