2016-08-31 176 views
0

我正在創建一個基本繪圖應用程序。以下功能用於繪製線條。Android Canvas繪製線

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)開始繪圖