svg矢量图实现android多形状图形框架-动脑学院

位图:可以看到像素点 png jpg…
矢量图:算法生成的 依据路径
SVG:SVG 是使用 XML 来描述二维图形和绘图程序的语言。

矩形:






    


SVG路径Path:









如何使用这个xml的svg呢?又该如何合成呢?

SVGParser解析XML文件。

code:得到svg的picture的bitmap

getSvgBitmap(context,size,size,svgRawRourceId)  {
    Bitmap bitmap = Bitmap.creatBitmap(width,heigth,Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.BLACK);

    if(svgRawResourceId>0){

        SVG svg = SVGParser.getSVGFromInputStream(content().getResource().openRawResource(svgRawResourceId),...);
        canvas.drawPicture(svg.getPicture());
    }else{
        canvas.drawRect(new Rect(0,0,width,width),paint);
    }

    return bitmap;
}

code:根据svg图形和原始图片合成目标图片

public static Bitmap getSvgShapeBitmap(Context contex,Bitmap fg,int svgRawRourceId){

    int size = Math.min(fg.getWidth(),fg.getHeigth());
    int x = (fg.getWidth()-size)/2;
    int y = (fg.getHeigth()-size)/2;

    // 先加载svg图片
    Bitmap bg = getSvgBitmap(context,size,size,svgRawRourceId);
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    Bitmap bitmap = Bitmap.creatBitmap(width,heigth,Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    canvas.drawBitmap(bg,new Matrix(),pain);
    // 设置交集模式SrcATop
    pain.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
    canvas.drawBitmap(Bitmap.createBitmap(fg,x,y,size,size),new Matri(),paint);
    return bitmap();
}

svg矢量图实现android多形状图形框架-动脑学院_第1张图片

你可能感兴趣的:(Android进阶)