代码之家  ›  专栏  ›  技术社区  ›  Mir-Ismaili

android rotatedrawable:不适用于矢量绘图

  •  1
  • Mir-Ismaili  · 技术社区  · 8 年前

    在使用 矢量可绘制 在一个 RotateDrawble ,每个2次 全周期(0°至360°之间/ level: 0 → 10000 ) !第一个关于 90度( level: 2500 ) 还有一个关于 270度( level: 7500 ) . 见以下测试:


    我的 RotateDrawable (文件名: rotatable_info.xml ):

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

    我的布局设计:

    <LinearLayout android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
    
        <ImageView style="@style/style" android:id="@+id/ImageView00" />
        <ImageView style="@style/style" android:id="@+id/ImageView01" />
        <ImageView style="@style/style" android:id="@+id/ImageView02" />
        ...
        <ImageView style="@style/style" android:id="@+id/ImageView19" />
    </LinearLayout>
    

    引用样式:

    <style name="style">
        <item name="android:layout_width">32dp</item>
        <item name="android:layout_height">32dp</item>
        <item name="android:src">@drawable/rotatable_info</item>
    </style>
    

    我的代码:

    int n = -550;
    ((RotateDrawable) this.<ImageView>findViewById(R.id.ImageView00).getDrawable()).mutate().setLevel(n+=550);
    ((RotateDrawable) this.<ImageView>findViewById(R.id.ImageView01).getDrawable()).mutate().setLevel(n+=550);
    ...
    ((RotateDrawable) this.<ImageView>findViewById(R.id.ImageView18).getDrawable()).mutate().setLevel(n+=550);
    ((RotateDrawable) this.<ImageView>findViewById(R.id.ImageView19).getDrawable()).mutate().setLevel(n+=550);
    

    ( .mutate() 需要为每个 ImageView . 这对主要问题没有影响。)

    我的结果(!?!?)

    Wonderful RotateDrawable for Vectors


    ic_info_black_24dp.xml :(由Android Studio中的Vector Asset Studio生成…我还测试了一些其他SVG。 光栅绘图没有问题 )

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
            android:width="24dp"
            android:height="24dp"
            android:viewportWidth="24.0"
            android:viewportHeight="24.0">
        <path
            android:fillColor="#FF000000"
            android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"/>
    </vector>
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Mir-Ismaili    7 年前

    好像是个虫子。 vectorDrawables.useSupportLibrary = true 解决了问题。

    “矢量可绘图向后兼容解决方案”部分 详情见下页:

    https://developer.android.com/guide/topics/graphics/vector-drawable-resources

    推荐文章