矢量图向后兼容性和安装非官方支持库

5
请耐心等待,我是新手!
我想在我的安卓应用程序中使用向量,并且希望我的应用程序向后兼容。我发现了这个看起来非常酷的支持库
所以我对如何“安装”它感到困惑。它给你一个链接可以下载.pom、.aar、javadoc.jar和sources.jar文件。我应该下载哪一个文件,并将其放在哪个文件夹中呢?
(我正在使用Android Studio!)
(有人知道一个不同的VectorDrawable支持库吗?我很想听听大家的经验!)

如何使用appcompat矢量图的实际信息 - https://dev59.com/Hpzha4cB1Zd3GeqPHp7S - Maksim Ostrovidov
4个回答

7

这里有一个对我有效的选项,使用这个库 - https://github.com/wnafee/vector-compat(API 14+)。

android {
    // use version 22 or higher
    buildToolsVersion "22.0.1"
    ...
}
dependencies {
    compile 'com.wnafee:vector-compat:1.0.5'
    ...
}

创建一个自定义的ImageView类,使用矢量兼容类 -

public class SvgImageView extends ImageView {        
    private Drawable icon;


    public SvgImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray ta = context.obtainStyledAttributes(attrs,
                R.styleable.button_left, 0, 0);

        try {
            int resId = ta.getResourceId(R.styleable.button_left_b_icon, -1);            
            if (resId != -1) {
                icon = ResourcesCompat.getDrawable(this.getContext(), resId);

            }


        } finally {
            ta.recycle();
        }


        if (icon != null) {
            setImage(icon);
        }

    }   

    public void setImage(Drawable icon) {
        SvgImageView.this.setImageDrawable(icon);

    }



}

矢量图示例 -
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:width="@dimen/logo_dimen"
    android:height="@dimen/logo_dimen"
    android:viewportWidth="@integer/view_port_dimen_logo"
    android:viewportHeight="@integer/view_port_dimen_logo"

    app:vc_viewportWidth="@integer/view_port_dimen_logo"
    app:vc_viewportHeight="@integer/view_port_dimen_logo">
    <group
        android:name="rotationGroup"
        android:pivotX="0"
        android:pivotY="0"
        android:rotation="0">

        <path
            android:name="v"
            android:fillColor="@color/white"
            android:pathData="m15.5,15.6c0,-1.5 2.8,-1.9 2.8,-5c0,-1.5 -0.7,-2.6 -1.8,-3.5h1.6l1.7,-1.1h-5c-1.7,0 -3.5,0.4 -4.8,1.6c-1,0.8 -1.6,2.1 -1.6,3.4c0,2.4 1.9,4.1 4.2,4.1c0.3,0 0.5,0 0.8,0c-0.1,0.3 -0.3,0.6 -0.3,1c0,0.7 0.3,1.2 0.8,1.8c-1.6,0.1 -3.4,0.3 -4.9,1.2c-1.1,0.7 -2,1.8 -2,3.2c0,0.6 0.2,1.1 0.4,1.6c1,1.7 3.2,2.2 5,2.2c2.3,0 4.9,-0.7 6.1,-2.8c0.4,-0.6 0.6,-1.3 0.6,-2.1c0.2,-3.5 -3.6,-4 -3.6,-5.6zm-1.7,-1.2c-2.2,0 -3.2,-2.8 -3.2,-4.6c0,-0.7 0.1,-1.4 0.6,-1.9c0.4,-0.6 1.1,-0.9 1.7,-0.9c2.2,0 3.2,3 3.2,4.8c0,0.7 -0.1,1.4 -0.6,1.9c-0.4,0.4 -1.1,0.7 -1.7,0.7zm0,10.5c-1.9,0 -4.5,-0.8 -4.5,-3.2c0,-2.5 2.9,-3.1 4.9,-3.1c0.2,0 0.4,0 0.6,0c1.2,0.8 2.8,1.8 2.8,3.4c-0.1,2.2 -2,2.9 -3.8,2.9zm9.7,-10.5v-2.6h-1.3v2.6h-2.5v1.3h2.5v2.6h1.3v-2.6h2.6v-1.3h-2.6l0,0z"
            app:vc_fillColor="@color/white"
            app:vc_pathData="m15.5,15.6c0,-1.5 2.8,-1.9 2.8,-5c0,-1.5 -0.7,-2.6 -1.8,-3.5h1.6l1.7,-1.1h-5c-1.7,0 -3.5,0.4 -4.8,1.6c-1,0.8 -1.6,2.1 -1.6,3.4c0,2.4 1.9,4.1 4.2,4.1c0.3,0 0.5,0 0.8,0c-0.1,0.3 -0.3,0.6 -0.3,1c0,0.7 0.3,1.2 0.8,1.8c-1.6,0.1 -3.4,0.3 -4.9,1.2c-1.1,0.7 -2,1.8 -2,3.2c0,0.6 0.2,1.1 0.4,1.6c1,1.7 3.2,2.2 5,2.2c2.3,0 4.9,-0.7 6.1,-2.8c0.4,-0.6 0.6,-1.3 0.6,-2.1c0.2,-3.5 -3.6,-4 -3.6,-5.6zm-1.7,-1.2c-2.2,0 -3.2,-2.8 -3.2,-4.6c0,-0.7 0.1,-1.4 0.6,-1.9c0.4,-0.6 1.1,-0.9 1.7,-0.9c2.2,0 3.2,3 3.2,4.8c0,0.7 -0.1,1.4 -0.6,1.9c-0.4,0.4 -1.1,0.7 -1.7,0.7zm0,10.5c-1.9,0 -4.5,-0.8 -4.5,-3.2c0,-2.5 2.9,-3.1 4.9,-3.1c0.2,0 0.4,0 0.6,0c1.2,0.8 2.8,1.8 2.8,3.4c-0.1,2.2 -2,2.9 -3.8,2.9zm9.7,-10.5v-2.6h-1.3v2.6h-2.5v1.3h2.5v2.6h1.3v-2.6h2.6v-1.3h-2.6l0,0z" />

    </group>
</vector>

Example -

<packagename.SvgImageView     

            app:b_icon="@drawable/google_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView3" />

嘿@attels!感谢您的快速回复!只是为了确保,您所要做的就是添加android { // use version 22 or higher buildToolsVersion "22.0.1" ... } dependencies { compile 'com.wnafee:vector-compat:1.0.5' ... } - 代码并添加自定义类,就这样? - Avery Miller
1
@Solace 在 Eclipse 中使用 Gradle 是可能的,可以使用 https://gradle.org/eclipse/ 等工具,但您也可以直接从库中复制粘贴代码。 - Mikelis Kaneps
1
@Solace 最简单的方法是从这里 https://github.com/wnafee/vector-compat/tree/master/library/src/main/java/com/wnafee/vector 复制所有类,以及从这里 https://github.com/wnafee/vector-compat/tree/master/library/src/main/res 复制 value 文件夹。 - Mikelis Kaneps
1
@Solace 是的,我明白了。只需将该方法注释掉,您可能不需要它。 - Mikelis Kaneps
1
@Solace库的最小SDK版本为14,它应该可以在14上运行。 - Mikelis Kaneps
显示剩余8条评论

4
谷歌刚刚宣布推出Android Studio 1.4版本,支持矢量图的向后兼容。对于Lollipop及以上版本的设备,会使用矢量图格式,而对于早期的设备,则会生成适合不同屏幕密度的.png文件。具体信息请参见此链接:http://android-developers.blogspot.com/2015/09/android-studio-14.html
请确保您的Gradle Build版本为1.4.0或更高版本!

从技术上讲是正确的,但我在这里搜索是因为我使用内置转换器时遇到了构建错误。 - mix3d

4
感谢在谷歌之前移植此库的人们!
重要消息是,谷歌发布了 Android Support Library 23.2 支持矢量可绘制图形和动画矢量可绘制图形!
注意:
- 矢量图像可回溯到 API 7(Android 2.1 Eclair)。 - 动画向量的范围更受限制,仅能回溯到 API 11。

2
我找到的最佳解决方案是BetterVectorDrawable库和SVG to VectorDrawable Converter一起使用。 BetterVectorDrawable是适用于Android 4.0+的VectorDrawable实现,具有可配置的回退行为,在Android 5.0+上。 该库可以通过一行命令添加到项目中(请参见自述文件)。 SVG to VectorDrawable Converter是将SVG图像批量转换为Android VectorDrawable XML资源文件的转换器。在线版本在此处
链接指向自述文件,提供了关于如何使用库和转换器的足够信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接