你可以将VectorDrawable pathData转换为Path对象吗?

时间:2017-08-08 12:53:17

标签: android vector

是否可以从pathData中提取VectorDrawable并将其转换为Path对象?

我想创建一个自定义ViewOutlineProvider,并为其提供一个任意形状来剪辑和投射阴影。如果有方法可以直接使用VectorDrawable,那就更好了。

感谢, NDH

1 个答案:

答案 0 :(得分:2)

  

“Android您可以将VectorDrawable - > pathData转换为   android.graphics。Path”。

简介

我们需要:

  

github中有VectorMaster可以所有工作   对你而言。

只需在应用的build.gradle中添加以下依赖项(请参阅包含的示例应用):

dependencies {
      compile 'com.sdsmdg.harjot:vectormaster:1.1.3'
}

以下是使用它的我的测试应用的图片: enter image description here

设置

这是一个可以使用的Vector(pathData)... res \ drawable \ ic_heart.xml

<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:name="outline"
        android:pathData="M20.84,4.61a5.5,5.5 0,0 0,-7.78 0L12,5.67l-1.06,-1.06a5.5,5.5 0,0 0,-7.78 7.78l1.06,1.06L12,21.23l7.78,-7.78 1.06,-1.06a5.5,5.5 0,0 0,0 -7.78z"
        android:strokeLineCap="round"
        android:strokeColor="#5D5D5D"
        android:fillColor="#00000000"
        android:strokeWidth="2"
        android:strokeLineJoin="round"/>
</vector>

我们的布局中有VectorMasterView

... RES \布局\的 activity_main

<com.sdsmdg.harjot.vectormaster.VectorMasterView
    android:id="@+id/heart_vector"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_margin="10dp"
    android:scaleX="0.8"
    android:scaleY="0.8"
    app:vector_src="@drawable/ic_heart" />

代码

Vector中设置onCreate

//normal stuff
setContentView(R.layout.activity_main);

//Inflate the `Vector`
VectorMasterView vmHeartVector = (VectorMasterView) findViewById(R.id.heart_vector);

// find the correct path using name
PathModel outline = vmHeartVector.getPathModelByName("outline");

String pathData   = outline.getPathData();// this is our pathData
Path   path       = outline.getPath();    // this is our path object;

一些链接: Vector drawables overviewPathpathDataVectorDrawableAnimatedVectorDrawable,  VectorDrawableCompatAnimatedVectorDrawableCompat