Мне нужно нарисовать облако так же, как показано ниже.
Вот код, который я пытаюсь, но не могу.
private Path cloudPath(float xRatio, float yRatio) {
xRatio = (float) (xRatio / 500.0);
yRatio = (float) (yRatio / 505.0);
Path cloudPath = new Path();
cloudPath.moveTo(321.639f * xRatio, 198.999f * yRatio);
cloudPath.cubicTo(358.117f * xRatio, 134.634f * yRatio, 343.492f * xRatio, 185.892f * yRatio, 358.117f * xRatio, 161.971f * yRatio);
cloudPath.cubicTo(283.117f * xRatio, 59.634f * yRatio, 358.117f * xRatio, 93.213f * yRatio, 324.539f * xRatio, 59.634f * yRatio);
cloudPath.cubicTo(278.695f * xRatio, 59.762f * yRatio, 281.633f * xRatio, 59.634f * yRatio, 280.158f * xRatio, 59.677f * yRatio);
cloudPath.cubicTo(199.746f * xRatio, 0f * yRatio, 269.002f * xRatio, 25.28f * yRatio, 237.327f * xRatio, 0f * yRatio);
cloudPath.cubicTo(133.073f * xRatio, 34.254f * yRatio, 172.272f * xRatio, 0f * yRatio, 147.953f * xRatio, 13.512f * yRatio);
cloudPath.lineTo(133.073f * xRatio, 34.254f * yRatio);
cloudPath.cubicTo(98.117f * xRatio, 25.626f * yRatio, 122.635f * xRatio, 28.745f * yRatio, 110.741f * xRatio, 25.626f * yRatio);
cloudPath.cubicTo(23.117f * xRatio, 100.626f * yRatio, 56.696f * xRatio, 25.626f * yRatio, 23.117f * xRatio, 59.205f * yRatio);
cloudPath.cubicTo(30.651f * xRatio, 133.426f * yRatio, 23.117f * xRatio, 112.389f * yRatio, 25.825f * xRatio, 123.518f * yRatio);
cloudPath.lineTo(30.651f * xRatio, 133.426f * yRatio);
cloudPath.cubicTo(0f * xRatio, 193.916f * yRatio, 12.065f * xRatio, 147.077f * yRatio, 0f * xRatio, 169.087f * yRatio);
cloudPath.cubicTo(75f * xRatio, 268.915f * yRatio, 0f * xRatio, 235.337f * yRatio, 33.579f * xRatio, 268.915f * yRatio);
cloudPath.cubicTo(83.329f * xRatio, 268.458f * yRatio, 77.815f * xRatio, 268.915f * yRatio, 80.595f * xRatio, 268.76f * yRatio);
cloudPath.lineTo(83.329f * xRatio, 268.458f * yRatio);
cloudPath.cubicTo(151.5f * xRatio, 304.205f * yRatio, 98.323f * xRatio, 290.064f * yRatio, 123.265f * xRatio, 304.205f * yRatio);
cloudPath.cubicTo(201.273f * xRatio, 287.582f * yRatio, 170.173f * xRatio, 304.205f * yRatio, 187.405f * xRatio, 298.02f * yRatio);
cloudPath.cubicTo(249.239f * xRatio, 304.205f * yRatio, 214.467f * xRatio, 297.992f * yRatio, 231.127f * xRatio, 304.205f * yRatio);
cloudPath.cubicTo(326.739f * xRatio, 226.705f * yRatio, 292.041f * xRatio, 304.205f * yRatio, 326.739f * xRatio, 269.507f * yRatio);
cloudPath.cubicTo(321.639f * xRatio, 198.999f * yRatio, 326.739f * xRatio, 216.943f * yRatio, 324.934f * xRatio, 207.602f * yRatio);
cloudPath.close();
cloudPath.moveTo(321.639f * xRatio, 198.999f * yRatio);
return cloudPath;
}
метод ondraw:
canvas.drawPath(path, paint);
Пожалуйста, помогите мне. Мне нужно нарисовать эту форму, используя Path, мы не использовали растровое изображение вместо Path.
Поскольку мне нужно удалить эту множественную фигуру из стека, мне нужно разработать эту фигуру в Path Object.
Спасибо за продвинутый уровень.
Редактировать вопрос
Я использовал приведенный ниже код, но рисование начинается с верхней позиции, как с 0,0. я нарисовал эту форму в методе onActionMove на холсте.
public Path draw(int x, int y, int w, int h, int color) {
Path t = new Path();
Matrix m = new Matrix();
Paint p = new Paint();
p.setColor(color);
p.setAntiAlias(true);
// original size of path
float ow = 200f;
float oh = 200f;
float od = (w / ow < h / oh) ? w / ow : h / oh;
m.reset();
m.setScale(od, od, w / ow, h / oh);
t.reset();
t.moveTo(x, y);
t.moveTo(230.4f, 389.57f);
t.cubicTo(194.87f, 389.57f, 160.53f, 375.34f, 135.23f, 350.32f);
t.cubicTo(126.79f, 353.95f, 117.63f, 355.87f, 108.39f, 355.87f);
t.cubicTo(71.04f, 355.87f, 40.66f, 325.48f, 40.66f, 288.12f);
t.cubicTo(40.66f, 284.13f, 41.04f, 280.08f, 41.79f, 276.03f);
t.cubicTo(15.52f, 256.6f, 0.0f, 226.05f, 0.0f, 193.21f);
t.cubicTo(0.0f, 141.56f, 38.98f, 97.72f, 89.71f, 91.12f);
t.cubicTo(102.41f, 57.89f, 134.06f, 35.92f, 170.07f, 35.92f);
t.cubicTo(201.51f, 35.92f, 230.25f, 53.09f, 245.33f, 80.28f);
t.cubicTo(256.19f, 76.53f, 267.51f, 74.62f, 279.11f, 74.62f);
t.cubicTo(336.25f, 74.62f, 382.74f, 121.1f, 382.74f, 178.24f);
t.cubicTo(382.74f, 180.64f, 382.63f, 183.08f, 382.42f, 185.66f);
t.cubicTo(408.09f, 195.71f, 425.49f, 220.71f, 425.49f, 248.69f);
t.cubicTo(425.49f, 288.36f, 390.96f, 320.14f, 350.76f, 316.07f);
t.cubicTo(327.63f, 360.91f, 281.04f, 389.57f, 230.4f, 389.57f);
t.transform(m);
return t;
}
private void onActionMove(MotionEvent event) {
float x = event.getX();
float y = event.getY();
Path path = this.getCurrentPath();
path.reset();
path.addPath(draw((int) startX, (int) startY, (int) x, (int) y, 0xffff8000));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(path, paint);
}
Пожалуйста, помогите мне в этом .. Спасибо заранее.