我在位图上绘制网格。用户可以更改大小,宽高比或拖动网格。使用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 :(得分:0)
由于没有源代码你正在调用该函数,我找不到口吃的确切原因。我想你想通过用户交互“实时”改变网格。
我认为你应该避免在用户拖动时重绘整个网格
相反,您可以根据需要翻译,缩放或旋转(如果需要)前一个位图。
当然,结果图像有时质量不高,但是当用户停止交互时,您可以重新创建整个网格位图。
通过这种方式,您可以实现“实时”的网格创建效果。
答案 1 :(得分:0)
我通过做一些事情解决了这个问题:优化dev guide之后的布局。然后我简单地缩小我用来绘制网格的位图,然后当我想将它保存到原始图像时将其缩放。这让一切都变得顺畅......(实际上太快了)