0

我正在学习 Android 并尝试在 Canvas 上绘制不同的形状。目前我被一个不同角度的椭圆卡住了:

在此处输入图像描述

我尝试使用path.addRoundRect()方法(采用半径数组的方法),但无法弄清楚我应该在那里传递什么值才能实现这种形状。我也尝试过使用path.lineTo(),但无法达到这样的结果(有点相似,但仍然不是我需要的)。什么是实现这一目标的好解决方案?

编辑1:我尝试过的是:

Path path= new Path();
    path.moveTo(x - radius, y - radius/ 1.5f);
    path.lineTo(x - radius/ 4, y - radius);
    path.lineTo(x, y - radius);
    path.lineTo(x + radius/ 2, y - radius);
    path.lineTo(x + radius, y - radius/ 2);
    path.lineTo(x, y + radius/ 2);
    path.lineTo(x - radius/ 2, y + radius/ 1.5f);
    path.lineTo(x - radius, y + radius/ 4);
    path.lineTo(x - radius, y - radius/ 1.5f);
    path.close();

Paint pathPaint = new Paint();
        pathPaint.setColor(Color.BLACK);                    
        pathPaint.setStrokeWidth(2.5f);              
        pathPaint.setDither(true);                    
        pathPaint.setStyle(Style.STROKE);       
        pathPaint.setStrokeJoin(Join.ROUND); 
        pathPaint.setStrokeCap(Cap.ROUND);      
        pathPaint.setPathEffect(new CornerPathEffect(20)); 
        pathPaint.setAntiAlias(true);
        canvas.drawOval(new RectF(x - radius, y - radius+ 2, x + radius-2, y + radius- 2), pathPaint);
        canvas.drawPath(path, pathPaint);

X 和 Y 是显示器上的一些坐标,半径是圆的半径(我开始用圆绘制)。它等于 14 像素。

我也试过这种方式:

float[] radii = new float[] {
                5, 
                5,
                1,
                1,
                5,
                1,
                1,
                1,

        };
        path.addRoundRect(new RectF(x - radius, y - radius, x + radius, 

y + radius), 
                    radii, Direction.CW);
canvas.drawPath(path, pathPaint);
4

1 回答 1

0

试试 Canvas.skew() 函数。下面的 URL 有一个很好的例子。倾斜“倾斜”正在绘制的点。您将根据画布的当前中心获得不同的结果,因此根据需要 translate() 以获得您想要的结果。

http://css3files.com/transform/

于 2016-05-17T03:44:13.540 回答