美文网首页
Android vector转bitmap空指针NullPoin

Android vector转bitmap空指针NullPoin

作者: 钢镚koala | 来源:发表于2018-08-23 17:40 被阅读0次

    问题:

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.danger_build10);
    

    其中R.drawable.danger_build10是一个vector图片,此代码在4.4上运行正常,但在5.0以上的系统会出现空指针,原因在于此本来方法不能将vector转化为bitmap,而apk编译时为了向下兼容,会根据vector生产相应的png,而4.4的系统运行此代码时其实用的是png资源。这就是为什么5.0以上会报错,而4.4不会的原因

    解决办法:

    public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
        Drawable drawable = ContextCompat.getDrawable(context, drawableId);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            drawable = (DrawableCompat.wrap(drawable)).mutate();
        }
    
        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
    
        return bitmap;
    }
    

    更新Project gradle:

    dependencies {
            classpath 'com.android.tools.build:gradle:2.2.0-alpha5'
        }
    

    Module gradle:

    android {
        compileSdkVersion 23
        buildToolsVersion '23.0.3'
        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 23
            vectorDrawables.useSupportLibrary = true
        }
        ...
    }
    ...
    如果以上还是不行,请检查图片xml文件是否有不支持的标签,剔除了再试试。
    

    最后,对于做动画的插值器的开发人员,提供一个比较好的插值器计算工具地址: http://inloop.github.io/interpolator/

    相关文章

      网友评论

          本文标题:Android vector转bitmap空指针NullPoin

          本文链接:https://www.haomeiwen.com/subject/mpsmiftx.html