Заполните выбранную форму цветом на ощупь - PullRequest
0 голосов
/ 29 апреля 2019

У меня проблема. Я новичок в пакете SkiaSharp, поэтому я борюсь со следующей проблемой: я создал TriangleGrid со SkiaSharp, используя следующий код:

private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
    // the the canvas and properties
    var canvas = e.Surface.Canvas;

    // get the screen density for scaling
    var scale = Resources.DisplayMetrics.Density;
    var scaledSize = new SKSize(e.Info.Width / scale, e.Info.Height / scale);

    // handle the device screen density
    canvas.Scale(scale);

    SKPaint strokePaint = new SKPaint
    {
        Style = SKPaintStyle.Stroke,
        Color = SKColors.White,
        StrokeWidth = 3,
        IsAntialias = true,
    };


    int TrianglesVisiblePerRow = 4;
    int TrianglesPerRow = 6;
    int TriangleCountOnRow = 0;
    int RowCountOnScreen = 0;


    float TriangleWidth = scaledSize.Width / TrianglesVisiblePerRow;
    float TriangleRowHeight = (float)Math.Sqrt(Math.Pow(TriangleWidth, 2) - (Math.Pow((scaledSize.Width / (TrianglesVisiblePerRow * 2)), 2)));      
    float X_Start_Cooridnate = -TriangleWidth;
    float Y_Start_Cooridnate = 0;

    while (Y_Start_Cooridnate < scaledSize.Height)
    {
        while (TriangleCountOnRow < TrianglesPerRow)
        {
            // Create the path
            path = new SKPath();
            path.MoveTo(X_Start_Cooridnate, Y_Start_Cooridnate);
            path.LineTo(X_Start_Cooridnate + TriangleWidth, (TriangleRowHeight * RowCountOnScreen));

            if (RowCountOnScreen % 2 != 0)
            {
                path.LineTo(-(TriangleWidth / 2) + (scaledSize.Width / (TrianglesVisiblePerRow * 2)) + (TriangleWidth * TriangleCountOnRow), (TriangleRowHeight * (RowCountOnScreen + 1)));
            }
            else
            {
                path.LineTo(-TriangleWidth + (scaledSize.Width / (TrianglesVisiblePerRow * 2)) + (TriangleWidth * TriangleCountOnRow), (TriangleRowHeight * (RowCountOnScreen + 1)));
            }

            path.LineTo(X_Start_Cooridnate, Y_Start_Cooridnate);
            path.Close();
            canvas.DrawPath(path, strokePaint);

            TriangleCountOnRow += 1;
            X_Start_Cooridnate += TriangleWidth;
        }

        // Create the path
        path = new SKPath();
        path.MoveTo(0, TriangleRowHeight);
        path.LineTo(scaledSize.Width, TriangleRowHeight);
        path.Close();
        canvas.DrawPath(path, strokePaint);

        RowCountOnScreen += 1;
        if (RowCountOnScreen % 2 != 0)
        {
            X_Start_Cooridnate = -(TriangleWidth/2);
        }
        else
        {
            X_Start_Cooridnate = -TriangleWidth;
        }

        Y_Start_Cooridnate += TriangleRowHeight;
        TriangleCountOnRow = 0;
    }
}

Теперь я хочу закрасить треугольник, которого касались, цветом, но я не знаю, возможно ли это вообще. Поэтому мне нужен код, где вы можете коснуться треугольника или нескольких треугольников и чтобы этот конкретный треугольник приобрел другой цвет. Может ли кто-нибудь помочь мне с этим!?

...