首页 > 解决方案 > 在画布上绘制矢量可绘制对象(图像拉伸)

问题描述

我正在使用 android 中提供的 PDF api 创建 pdf,我想image在特定的 pdf 中绘制x,y

绘图已完成,但由于尺寸小,可绘制的 vaore 被拉伸并产生低质量的输出。

这是我用来绘制drawable的代码。

    Drawable starIcon = getContext().getDrawable(R.drawable.ic_star);
    VectorDrawableCompat moonIcon = VectorDrawableCompat.create(getContext().getResources(),R.drawable.ic_moon,getActivity().getTheme());

    PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 2).create();
    PdfDocument.Page page = pdfDocument.startPage(pageInfo);
    Canvas canvas = page.getCanvas();

    float x = drawX + (perItemWidth * col);
    RectF rectF = new RectF();
    rectF.set(x + 2.5F - perItemWidth, drawY + 1, x + 1, drawY + perItemHeight - 1);

    float importantSpaceFromLeft = (rectF.width() * 10F) / 100F;
    float importantSpaceFromTop = ((rectF.height() * 2F) / 100F);

    Rect moonIconBounds = new Rect();
    moonIconBounds.left = (int) (rectF.left + ((rectF.height() * 10F) / 100F)) + 10;
    moonIconBounds.right = (int) (rectF.left + ((rectF.height() * 10F) / 100F)) + 20;
    moonIconBounds.bottom = (int) (rectF.bottom - importantSpaceFromTop) - 10 - 2;
    moonIconBounds.top = (int) (rectF.bottom - importantSpaceFromTop) - 20 - 2;

    //Setting bounds like 0,0,20,20
    moonIcon.setBounds(0,0,moonIconBounds.width(),moonIconBounds.height());
    canvas.save();
    //Translate canvas to draw at x,y
    canvas.translate(moonIconBounds.left,moonIconBounds.top);
    moonIcon.draw(canvas);
    canvas.restore();

    Rect starIconBounds = new Rect();
    starIconBounds.left = (int) (rectF.left + ((rectF.height() * 10F) / 100F)) + 10;
    starIconBounds.right = (int) (rectF.left + ((rectF.height() * 10F) / 100F)) + 20;
    starIconBounds.bottom = (int) (rectF.bottom - importantSpaceFromTop);
    starIconBounds.top = (int) (rectF.bottom - importantSpaceFromTop) - 10;

    //Setting bound from rect
    starIcon.setBounds(starIconBounds);
    starIcon.draw(canvas);

output

https://i.stack.imgur.com/H8Alh.png

https://i.stack.imgur.com/k4kce.png

产生相同结果的两个图像都在拉伸,我不知道为什么两个向量都是从svg转换的。我怎样才能达到击球手的结果。

标签: androidpdfcanvaspdf-generation

解决方案


推荐阅读