2016-06-13 66 views
0

我正在通過位圖繪製網格。用戶可以改變大小,縱橫比,或者拖動網格。用drawLines這樣做會導致這些操作發生時相當糟糕的口吃。有更好的方法嗎?在畫布上畫線的更有效方法?

private void drawGrid() 
{ 
    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
    gridOverlayView.invalidate(); 

    int count = 0; 
    for(int i = 0; i < numColumns +1 ; i++) 
    { 
     points[count] = originX + (cellWidth * i); 
     points[count+1] = originY; 
     points[count+2] = originX + (cellWidth * i); 
     points[count+3] = originY + (gridHeight); 
     count += 4; 
    } 

    for(int i = 0; i < numRows +1; i++) 
    { 
     points[count] = originX; 
     points[count+1] = originY + (cellHeight * i); 
     points[count+2] = originX + (gridWidth); 
     points[count+3] = originY + (cellHeight * i); 
     count += 4; 
    } 

    canvas.drawLines(points, 0, points.length, paint); 
    gridOverlayView.setImageBitmap(gridOverlayBitmap); 
} 

這是被稱爲來自:

@Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
    { 
     originX += e2.getX() - e1.getX(); 
     if(originX < 0f) 
     { 
      originX = 0f; 
     } 
     if(originX + gridWidth > imageWidth) 
     { 
      originX = imageWidth - gridWidth; 
     } 

     originY += e2.getY() - e1.getY(); 
     if(originY < 0f) 
     { 
      originY = 0f; 
     } 
     if(originY + gridHeight > imageHeight) 
     { 
      originY = imageHeight - gridHeight; 
     } 

     drawGrid(); 
     return true; 
    } 

回答

0

我解決了這個問題,做了幾件事情:優化dev guide之後的佈局。然後我簡單地縮小了我用來繪製網格的位圖,然後在我想將其保存到原始圖像上時將其縮小。這一切都讓一切順利......(實際上太快)

0

因爲有你調用該函數沒有源代碼,我找不到口吃的確切原因。我想你想用用戶交互的方式「實時」更改網格。

我想你應該避免在用戶拖動的時候重畫整個網格。
相反,您可以根據需要翻譯,縮放或旋轉(如果需要)以前的位圖。

當然,結果圖像有時質量不好,但當用戶停止交互時,您可以重新創建整個網格位圖。
通過這種方式,您可以實現「類似實時」的網格創建效果。