在不同方向绘制多个矩形 android 问题
Drawing multiple rectangles in different directions android issue
你们好,善良的女士们和绅士们。我遇到了这个问题,我将不胜感激任何帮助。我会尽我所能解释到底发生了什么,希望你能帮助我,所以这里是:
基本上我画了一些墙并将它们发送到服务器上,我发送了两件事,宽度和高度。宽度或高度是 wallThickness 取决于墙壁方向,如果是垂直宽度 = wallThickness,如果水平高度 = wallThickness。现在我需要在一个单独的应用程序中以 Rect 的形式绘制这些墙,第一个从视图位置 0,0 开始,每个下一个都应该附加到前一个墙的末端并朝正确的方向移动。当 Rect(wall) 从上到下或从左到右绘制时,我没有问题
我想是因为我设法为那些 Rects 找到了正确的起点。问题是如何绘制需要从下到上或从右到左绘制的 Rects,如下所示:
这是用 Rect 提供 canvas 的方法
请记住,首先 startX 和 Y 是 0,0,并且该方法接收到的宽度和高度顺序正确,例如,如果我们有 4 面墙,它将从 1 到 4。
public void drawWall (int width,int height,int wallListSize){
wall = new Rect();
wall.set(startX,startY,width+startX,height+startY);
wallList.add(wall);
Log.i(TAG, "drawWall: Rect bottom:"+wall.bottom+" right:"+wall.right+" top:"+wall.top+" left:"+wall.left);
//setting up starting position for next wall
if (chooseDirection(width)){
//vertical
if (wall.bottom>startY){
// up to down stroke
Log.i(TAG, "drawWall: up to down stroke");
startY = wall.bottom;
startX = wall.left;
}else {
//down to up stroke
Log.i(TAG, "drawWall: down to up stroke");
startY = wall.top;
startX = wall.right;
// startX = wall
}
}else {
//horizontal
if (wall.right>startX){
//left to right stroke
Log.i(TAG, "drawWall: left to right stroke");
startX = wall.right;
startY = wall.bottom;
}else {
//right to left stroke
Log.i(TAG, "drawWall: right to left stroke");
startX = wall.left;
startY = wall.top;
}
}
//Checking if there is more walls or not
Log.i(TAG, "drawWall: ---STARTING POSITION--- startX "+startX+" startY "+startY+" ");
if (wallIndex < wallListSize){
Log.i(TAG, "drawWall: incrementing index");
wallIndex++;
}else {
Log.i(TAG, "drawWall: end of drawing, matching layout to wrap content");
setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT));
}
}
private boolean chooseDirection(int width){
if (width == wallThickness){
return true;
}else {
return false;
}
}
找到答案,在决定是哪种中风时不得不采取不同的方法。如果我从服务器发送起点和终点就可以得到它。
public void drawWall (int width,int height,int wallListSize,int x1,int x2,int y1,int y2){
wall = new Rect();
//setting up starting position for next wall
if (chooseDirection(width)){
//vertical
if (y1<y2){
// up to down stroke
wall.set(startX,startY,wallThickness+startX,height+startY);
startY = wall.height();
// startX=startX+wallThickness;
Log.i(TAG, "drawWall: up to down stroke");
}else {
//down to up stroke
wall.set(startX,height-startY,wallThickness+startX,startY);
startY = startY - wall.height();
// startX = startX + wallThickness;
Log.i(TAG, "drawWall: down to up stroke");
// startX = wall
}
}else {
//horizontal
if (x1<x2){
//left to right stroke
Log.i(TAG, "drawWall: left to right stroke");
wall.set(startX,startY,width+startX,wallThickness+startY);
startX = wall.width();
// startY = startY+wallThickness;
}else {
//right to left stroke
wall.set(width-startX,startY,startX,wallThickness+startY);
Log.i(TAG, "drawWall: right to left stroke");
startX = startX-wall.width();
// startY = startY+wallThickness;
}
}
//adding wall to the pool
wallList.add(wall);
//Checking if there is more walls or not
Log.i(TAG, "drawWall: Rect bottom:"+wall.bottom+" right:"+wall.right+" top:"+wall.top+" left:"+wall.left);
Log.i(TAG, "drawWall: ---STARTING POSITION FOR NEXT WALL--- startX "+startX+" startY "+startY+" ");
if (wallIndex < wallListSize){
wallIndex++;
}else {
Log.i(TAG, "drawWall: end of drawing, matching layout to wrap content");
startDraw = true;
invalidate();
}
}
你们好,善良的女士们和绅士们。我遇到了这个问题,我将不胜感激任何帮助。我会尽我所能解释到底发生了什么,希望你能帮助我,所以这里是:
基本上我画了一些墙并将它们发送到服务器上,我发送了两件事,宽度和高度。宽度或高度是 wallThickness 取决于墙壁方向,如果是垂直宽度 = wallThickness,如果水平高度 = wallThickness。现在我需要在一个单独的应用程序中以 Rect 的形式绘制这些墙,第一个从视图位置 0,0 开始,每个下一个都应该附加到前一个墙的末端并朝正确的方向移动。当 Rect(wall) 从上到下或从左到右绘制时,我没有问题
我想是因为我设法为那些 Rects 找到了正确的起点。问题是如何绘制需要从下到上或从右到左绘制的 Rects,如下所示:
这是用 Rect 提供 canvas 的方法 请记住,首先 startX 和 Y 是 0,0,并且该方法接收到的宽度和高度顺序正确,例如,如果我们有 4 面墙,它将从 1 到 4。
public void drawWall (int width,int height,int wallListSize){
wall = new Rect();
wall.set(startX,startY,width+startX,height+startY);
wallList.add(wall);
Log.i(TAG, "drawWall: Rect bottom:"+wall.bottom+" right:"+wall.right+" top:"+wall.top+" left:"+wall.left);
//setting up starting position for next wall
if (chooseDirection(width)){
//vertical
if (wall.bottom>startY){
// up to down stroke
Log.i(TAG, "drawWall: up to down stroke");
startY = wall.bottom;
startX = wall.left;
}else {
//down to up stroke
Log.i(TAG, "drawWall: down to up stroke");
startY = wall.top;
startX = wall.right;
// startX = wall
}
}else {
//horizontal
if (wall.right>startX){
//left to right stroke
Log.i(TAG, "drawWall: left to right stroke");
startX = wall.right;
startY = wall.bottom;
}else {
//right to left stroke
Log.i(TAG, "drawWall: right to left stroke");
startX = wall.left;
startY = wall.top;
}
}
//Checking if there is more walls or not
Log.i(TAG, "drawWall: ---STARTING POSITION--- startX "+startX+" startY "+startY+" ");
if (wallIndex < wallListSize){
Log.i(TAG, "drawWall: incrementing index");
wallIndex++;
}else {
Log.i(TAG, "drawWall: end of drawing, matching layout to wrap content");
setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT));
}
}
private boolean chooseDirection(int width){
if (width == wallThickness){
return true;
}else {
return false;
}
}
找到答案,在决定是哪种中风时不得不采取不同的方法。如果我从服务器发送起点和终点就可以得到它。
public void drawWall (int width,int height,int wallListSize,int x1,int x2,int y1,int y2){
wall = new Rect();
//setting up starting position for next wall
if (chooseDirection(width)){
//vertical
if (y1<y2){
// up to down stroke
wall.set(startX,startY,wallThickness+startX,height+startY);
startY = wall.height();
// startX=startX+wallThickness;
Log.i(TAG, "drawWall: up to down stroke");
}else {
//down to up stroke
wall.set(startX,height-startY,wallThickness+startX,startY);
startY = startY - wall.height();
// startX = startX + wallThickness;
Log.i(TAG, "drawWall: down to up stroke");
// startX = wall
}
}else {
//horizontal
if (x1<x2){
//left to right stroke
Log.i(TAG, "drawWall: left to right stroke");
wall.set(startX,startY,width+startX,wallThickness+startY);
startX = wall.width();
// startY = startY+wallThickness;
}else {
//right to left stroke
wall.set(width-startX,startY,startX,wallThickness+startY);
Log.i(TAG, "drawWall: right to left stroke");
startX = startX-wall.width();
// startY = startY+wallThickness;
}
}
//adding wall to the pool
wallList.add(wall);
//Checking if there is more walls or not
Log.i(TAG, "drawWall: Rect bottom:"+wall.bottom+" right:"+wall.right+" top:"+wall.top+" left:"+wall.left);
Log.i(TAG, "drawWall: ---STARTING POSITION FOR NEXT WALL--- startX "+startX+" startY "+startY+" ");
if (wallIndex < wallListSize){
wallIndex++;
}else {
Log.i(TAG, "drawWall: end of drawing, matching layout to wrap content");
startDraw = true;
invalidate();
}
}