【问题标题】:Drawing multiple rectangles in different directions android issue在不同方向上绘制多个矩形android问题
【发布时间】:2017-04-21 13:41:07
【问题描述】:

你好,善良的女士们和温柔的男士们。我被困在这个问题上,任何帮助都将不胜感激。我会尽力解释到底发生了什么,希望你能帮助我,所以这里是: 基本上我正在绘制一些墙并将它们发送到服务器上,我要发送两件事,宽度和高度。宽度或高度是wallThickness,取决于墙的方向,如果是垂直宽度= wallThickness,如果是水平高度= wallThickness。现在我需要在一个单独的应用程序中以 Rect 的形式绘制这些墙,第一个从视图位置 0,0 开始,每个下一个都应该将自己附加到前一个墙的末端并朝着正确的方向前进。从上到下或从左到右绘制 Rect(wall) 时我没有问题

我想是因为我设法为这些 Rects 找到了正确的起点。问题是如何绘制需要从下到上或从右到左绘制的矩形,如下所示:

这是为画布提供 Rect 的方法 请记住,第一个 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;
    }
}

【问题讨论】:

    标签: java android canvas logic rect


    【解决方案1】:

    找到了答案,在决定是哪种中风时不得不采取不同的方法。如果我从服务器发送起点和终点,就能得到它。

     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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多