2016-08-31 12 views
0

私は基本的な描画アプリケーションを作成しています。次の関数を使用して線を描画します。Android Canvas Drawing Line

public void touchEventLine(MotionEvent event){ 

     Log.e("Canvas","Line Specific Event"); 
     float x = event.getX(); 
     float y = event.getY(); 


     switch (event.getAction()){ 

      case MotionEvent.ACTION_DOWN: 

       Log.e("Canvas","Line Specific Event: Action Down"); 
       startX=x; 
       startY=y; 
       mPath.moveTo(startX,startY); 
       Log.e("Canvas","Line Specific Event: Moved to X:"+startX+" Y:"+startY); 
       mX=x; 
       mY=y; 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_MOVE: 

       Log.e("Canvas","Line Specific Event: Action Move"); 
       endX=x; 
       endY=y; 
       drawLine(endX,endY); 
       Log.e("Canvas","Line Specific Event: Drawing From X:"+startX+" Y:"+startY+" to X:"+endX+" Y:"+endY); 
       paths.add(mPath); 
       colorsMap.put(mPath,selectedColor); 
       mPath = new Path(); 
       isDrawing++; 
       invalidate(); 
       if(isDrawing>1) { 
        paths.remove(paths.size() - 2); 
        isDrawing--; 
       } 
       break; 
      case MotionEvent.ACTION_UP: 



       Log.e("Canvas","Line Specific Event: Action Up"); 
       endX=x; 
       endY=y; 

       drawLine(endX,endY); 
       paths.add(mPath); 
       colorsMap.put(mPath,selectedColor); 
       mPath = new Path(); 
       paths.remove(paths.size() - 2); 
       invalidate(); 
       isDrawing=0; 
       break; 



     } 

    } 

drawLine()関数は

private void drawLine(float x2,float y2){ 

     mPath.lineTo(x2,y2); 
     invalidate(); 
     Log.e("Canvas","Line Drawn"); 

    } 

と私のonDraw()機能では、私の問題は、行は左上から描画されていることである

protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(mBitmap, 0, 0, canvasPaint); 
     canvas.drawPath(mPath,drawPaint); 

     for (Path p : paths) { 

      int curColor= colorsMap.get(p); 
      drawPaint.setColor(curColor); 
      canvas.drawPath(p, drawPaint); 
     } 

     Log.e("Canvas","OnDraw() Called"); 


    } 

です画面の角。私はそれが(0,0)だと信じています。私は円と四角形を描画するために同じロジックを使用し、両方とも正常に動作しました。 私のロジックに間違いはありませんか? どうすればこの問題を解決できますか? ありがとうございます

+0

"canvas.drawLine"を試しましたか? –

+0

あなたが推測したようにキャンバスの左上が(0,0)ですが、何が問題なのですか? – lelloman

+0

いいえ..私はパスを使用する場合にのみ動作するアンドゥ機能を実装しているためです。 –

答えて

2

これは簡単です。

path.moveTo(firstPoint_X, firstPoint_y); 

(図の最初) ()あなたは=新しいパス(MPATHを呼び出して、各ラインの後;)

あなたが新しいを行った後

方法path.moveTo

を呼び出さない場合Pathクラスのインスタンスです。デフォルトでは、画面の位置(0,0)から描画を開始します。