有没有相当于java的GeneralPath,因为Android中不允许使用awt类,在我的程序中我从数据文件中绘制一个形状并将这些数据作为MoveTo和LineTo添加到GeneralPath然后使用java.awt.Graphics2D填充绘制(形状)。
答案 0 :(得分:2)
其中一个选项是ShapeRenderer及其多边形功能。您所要做的就是以格式
传递一个float数组[x1, y1, x2, y2, x3, y3...]
唯一的问题是无法绘制填充的多边形。
绘制皮卡的代码示例:
@Override
public void show()
{
shapeRenderer = new ShapeRenderer();
}
@Override
public void render(float delta)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
shapeRenderer.begin(ShapeType.Line);
shapeRenderer.setColor(Color.WHITE);
shapeRenderer.polygon(new float[]{ 20, 20, 20, 40, 60, 40, 60, 60, 90, 60, 110, 40, 110, 20, 100, 20, 90, 10, 80, 20, 60, 20, 50, 10, 40, 20 });
shapeRenderer.end();
}
和rezult:
另一种允许您绘制填充形状的解决方案是使用 PolygonSpriteBatch 并为其生成PolygonRegion。以下代码基于this question Mikael Mayer's comment,它将绘制一个拾取 - 此次填充的:
@Override
public void show()
{
//creating a pixmap - array of pixels
Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
//setting it white color and fill format
pix.setColor(Color.WHITE.toIntBits());
pix.fill();
//now we are passing vertices and triangles
PolygonRegion polyReg = new PolygonRegion(new TextureRegion( new Texture(pix) ),
new float[] //vertices
{
20, 20, 20, 40, 60, 40, 60, 60, 90, 60, 110, 40, 110, 20, 100, 20, 90, 10, 80, 20, 60, 20, 50, 10, 40, 20
}
, new short[] //triangles
{
0, 1, 2,
2, 3, 4,
4, 5, 2,
5, 6, 2,
6, 7, 2,
7, 8, 9,
9, 2, 7,
9, 10, 2,
10, 11, 12,
10, 0, 2
});
//creating a sprite based on polygonRegion above
poly = new PolygonSprite(polyReg);
polyBatch = new PolygonSpriteBatch();
}
@Override
public void render(float delta)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
polyBatch.begin();
poly.draw(polyBatch);
polyBatch.end();
}
结果是:
现在在这里:
PolygonRegion polyReg = new PolygonRegion(new TextureRegion( new Texture(pix) ), ...
我们必须传递给方法:
我们需要定义应该绘制的三角形 - 应用程序不知道这一点。所以我们传递带有顶点数字的短数组 - 一个三角形的下三个 - 以逆时针方向。
看看这个:
拥有这个顶点我们必须"填充"带三角形的拾音器。如何解释下面的图片:
在代码中将图像与短数组进行比较,您应该了解它是如何工作的。