是否可以从pathData
中提取VectorDrawable
并将其转换为Path
对象?
我想创建一个自定义ViewOutlineProvider
,并为其提供一个任意形状来剪辑和投射阴影。如果有方法可以直接使用VectorDrawable
,那就更好了。
感谢, NDH
答案 0 :(得分:2)
“Android您可以将
VectorDrawable
- > pathData转换为 android.graphics。Path
”。
我们需要:
VectorDrawables
以查找pathData VectorDrawables
从XML扩展到View
类(或子类,ImageView等...)Path
类(使用android.util.PathParser
)
github
中有VectorMaster可以所有工作 对你而言。
只需在应用的build.gradle
中添加以下依赖项(请参阅包含的示例应用):
dependencies {
compile 'com.sdsmdg.harjot:vectormaster:1.1.3'
}
这是一个可以使用的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 overview
,
Path
,
pathData,
VectorDrawable
,
AnimatedVectorDrawable
,
VectorDrawableCompat
,
AnimatedVectorDrawableCompat