2016-06-13 69 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

因为有你调用该函数没有源代码,我找不到口吃的确切原因。我想你想用用户交互的方式“实时”更改网格。

我想你应该避免在用户拖动的时候重画整个网格。
相反,您可以根据需要翻译,缩放或旋转(如果需要)以前的位图。

当然,结果图像有时质量不好,但当用户停止交互时,您可以重新创建整个网格位图。
通过这种方式,您可以实现“类似实时”的网格创建效果。