2017-04-21 8 views
-1

エルロ、親切な女性と優しい人。私はこの問題を抱えていて、助けていただければ幸いです。 基本的に私はいくつかの壁を描いて、それらをサーバーに送信しています、私が送信している2つのことがあります、そして、私はあなたのために、幅と高さ。幅または高さがwallThicknessは壁の方向に依存します(垂直の場合)。width = wallThickness、horizo​​ntal height = wallThickness。今度は別のアプリでRectのフォームでそれらの壁を描く必要があります。最初はビューの位置0,0から始まり、次の壁はすべて前の壁の端に取り付けて右の方向に移動します。 Rect(壁)が上から下、または左から右に描画されるときに問題はありません。 enter image description here異なる方向の複数の長方形を描くアンドロイドの問題

私はこれらのRectの正しい始点を得ることができたからです。質問は、ボトムアップに、または次のように右から左に描画する必要があるRectsを描画する方法である: enter image description here

これが最初のstartxとYであることを心に留めておくのRect でキャンバスを送り込む方法であり、 0,0は、我々は4つの壁を持っている場合、メソッドrecievesは、例えば、正しい順序である幅と高さは、それが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; 
    } 
} 

答えて

-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(); 
    } 
} 
関連する問題