我正在尝试使用3个画布对象(drawCircle,drawOval,drawRect)在gridview位置进行设置,以制作珠宝游戏。我已经使用Random.nextInt(bound:3)获得了随机位置,但是对如何设置画布对象的位置感到困惑。我有一个画布类MyCanvas和一个CanvasAdapter类用于网格数据。我的想法是,我在canvas类中创建一个方法,该方法在切换案例中设置一个随机数,然后绘制所需的对象。
public void randShapes()
{
switch(randInt.nextInt(3))
{
case 0: pixelPaint.setColor(Color.RED);
pixelPaint.setStrokeWidth(60);
myCanvas.drawCircle(0, 0, 1, pixelPaint); return;
case 1: pixelPaint.setColor(Color.GREEN);
myCanvas.drawRect(0.5f,0.5f,
0.5f, 0.5f, pixelPaint); return;
case 2: pixelPaint.setColor(Color.BLUE);
myCanvas.drawRect(0.75f,0.75f,
0.5f, 0.5f, pixelPaint); return;
}
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int w = myBitmap.getWidth();
int h = myBitmap.getHeight();
randShapes();
...
}
然后在我的CanvasAdapter中获取数组中的位置,并将它们引用回到canvas类中
//CanvasAdapter.java
// Keep all canvas objects in array
public Integer[] mThumbIds = {
randInt.nextInt(3), randInt.nextInt(3),
randInt.nextInt(3), randInt.nextInt(3),
randInt.nextInt(3), randInt.nextInt(3),
randInt.nextInt(3), randInt.nextInt(3),
randInt.nextInt(3), randInt.nextInt(3),
randInt.nextInt(3), randInt.nextInt(3),
randInt.nextInt(3), randInt.nextInt(3),
randInt.nextInt(3), randInt.nextInt(3),
};
//Back to Canvas.java
int[] shapePosition = CanvasApdapter.mThumbsIds
public void randShapes()
{
for(int i = 0; i < shapePosition.length; i++){
switch(randInt.nextInt(3))
{
case 0: pixelPaint.setColor(Color.RED);
pixelPaint.setStrokeWidth(60);
myCanvas.drawCircle(shapePosition.length[i] + 0,shapePosition.length[i] + 0,shapePosition.length[i] + 1, pixelPaint); return;
case 1: pixelPaint.setColor(Color.GREEN);
myCanvas.drawRect(shapePosition.length[i] + 0.5f,shapePosition.length[i] + 0.5f,
shapePosition.length[i] + 0.5f, shapePosition.length[i] + 0.5f, pixelPaint); return;
case 2: pixelPaint.setColor(Color.BLUE);
myCanvas.drawRect(shapePosition.length[i] + 0.75f,shapePosition.length[i] + 0.75f,
shapePosition.length[i] + 0.5f, shapePosition.length[i] + 0.5f, pixelPaint); return;
}
}
}
我不确定我是否遵循正确的逻辑。我习惯于统一和C#/ C ++编程,而android studio使其难以遵循。我已尝试按照本教程进行操作 https://www.tutorialspoint.com/android/android_grid_view.htm谢谢大家的帮助。
答案 0 :(得分:0)
对于要创建的游戏,您已经定义了形状的网格(数组)。网格中的每个元素都是随机形状。绘制网格时,只需遍历网格的行和列并根据数组值绘制形状即可。
此代码应提供基本概念:
//CanvasAdapter.java
// Keep all canvas objects in 2D array, 2 columns, 8 rows
public Integer[][] mThumbIds = { // random values
{ randInt.nextInt(3), randInt.nextInt(3) },
{ randInt.nextInt(3), randInt.nextInt(3) },
{ randInt.nextInt(3), randInt.nextInt(3) },
{ randInt.nextInt(3), randInt.nextInt(3) },
{ randInt.nextInt(3), randInt.nextInt(3) },
{ randInt.nextInt(3), randInt.nextInt(3) },
{ randInt.nextInt(3), randInt.nextInt(3) },
{ randInt.nextInt(3), randInt.nextInt(3) }
};
//Back to Canvas.java
int[][] shapePosition = CanvasApdapter.mThumbsIds
int shapeheight = 1
int shapewidth = 1
public void drawShapes() // fill in grid
{
for(int row = 0; row < shapePosition.length; row++){
for(int col = 0; col < shapePosition[row].length; col++){
switch(shapePosition[row][col])
{
case 0: pixelPaint.setColor(Color.RED);
pixelPaint.setStrokeWidth(60);
myCanvas.drawCircle(row*shapeheight + 0.5f, col*shapewidth + 0, 0.5f, pixelPaint);
case 1: pixelPaint.setColor(Color.GREEN);
myCanvas.drawRect(row*shapeheight + 0.1f,col*shapewidth + 0.1f, row*shapeheight + 0.9f, col*shapewidth + 0.9f, pixelPaint);
case 2: pixelPaint.setColor(Color.BLUE);
myCanvas.drawRect(row*shapeheight + 0.1f,col*shapewidth + 0.1f, row*shapeheight + 0.9f, col*shapewidth + 0.9f, pixelPaint);
}
}
}
}
/// draw event, redraw grid
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int w = myBitmap.getWidth();
int h = myBitmap.getHeight();
drawShapes();
...
}