Android 使用画布将位图绘制到多边形

Android 使用画布将位图绘制到多边形,android,android-canvas,android-custom-view,Android,Android Canvas,Android Custom View,我有一个自定义视图。它有许多四边形而不是矩形。我必须绘制每个四边形的位图。现在,我用矩阵把位图画成四边形,但它被扭曲了。大概是这样的: float[] src = new float[] { 0.0f, 0.0f, 0.0f, (float) trimBitmap.getHeight(), (float) trimBitmap.g

我有一个自定义视图。它有许多四边形而不是矩形。我必须绘制每个四边形的位图。现在,我用矩阵把位图画成四边形,但它被扭曲了。大概是这样的:

float[] src = new float[] {
                            0.0f, 0.0f,
                            0.0f, (float) trimBitmap.getHeight(),
                            (float) trimBitmap.getWidth(), (float) trimBitmap.getHeight(),
                            (float) trimBitmap.getWidth(), 0.0f };
float[] dst = new float[] {
                            frame.get(0).x * ratio, frame.get(0).y * ratio,
                            frame.get(1).x * ratio, frame.get(1).y * ratio,
                            frame.get(2).x * ratio, frame.get(2).y * ratio,
                            frame.get(3).x * ratio, frame.get(3).y * ratio };

matrix.setPolyToPoly(src, 0, dst, 0, 4);
canvas.drawBitmap(trimBitmap, matrix, picturePaint);
我正在尝试使用BitmapShader,但不知道它是如何工作的? 有什么建议吗

编辑我正在尝试像这样使用BitmapShader

Path path = new Path();

path.moveTo(picture.getFrame().get(0).x * ratio, picture.getFrame().get(0).y * ratio);
path.lineTo(picture.getFrame().get(1).x * ratio, picture.getFrame().get(1).y * ratio);
path.lineTo(picture.getFrame().get(2).x * ratio, picture.getFrame().get(2).y * ratio);
path.lineTo(picture.getFrame().get(3).x * ratio, picture.getFrame().get(3).y * ratio);
path.lineTo(picture.getFrame().get(0).x * ratio, picture.getFrame().get(0).y * ratio);

BitmapShader shader = new BitmapShader(trimBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
picturePaint.setShader(shader);
canvas.drawPath(path, picturePaint);

谢谢。

paint.setShaderyourBitmapShader,然后是canvas.drawPathpath,paint@pskink当前位置我做了,但得到了一个非常奇怪的结果。你能指导我如何配置矩阵,使位图适合四边形吗。请帮忙,我讨厌这个问题。奇怪对不同的人有不同的意义,我不知道你的意思definition@pskink:它绘制位图的一小部分,然后复制边缘颜色。我想我必须配置一个矩阵,将位图的坐标映射为四边形的坐标。@pskink:我展示了我的代码。谢谢你的热情!