优化渲染画布

时间:2015-03-10 13:29:44

标签: java android canvas drawing

我努力解决代码(渲染)优化问题。 我在屏幕上有650个六边形,我需要将它们全部移动并自由缩放。 到目前为止,我有2d地图存储六边形对象,包含一些参数作为顶点,中心点等。 我的onDraw方法如下所示:

 @Override
    public void onDraw(final Canvas canvas) {
        if(hexMap == null || hexMap.length <= 0) {
            populateHexMap();
        }
        if(radiusChanged) {
            changeRadius();
        }
        for(int i = 0; i < hexMap.length; i++) {
            for(int j = 0; j < hexMap[i].length; j++) {
                if(hexMap[i][j] != null && hexMap[i][j].isToDraw()) {
                    paint.setColor(hexMap[i][j].getColor());
                    drawPath.rewind();
                    drawPath.moveTo(hexMap[i][j].getPoint(0).x, hexMap[i][j].getPoint(0).y);
                    drawPath.lineTo(hexMap[i][j].getPoint(1).x, hexMap[i][j].getPoint(1).y);
                    drawPath.lineTo(hexMap[i][j].getPoint(2).x, hexMap[i][j].getPoint(2).y);
                    drawPath.lineTo(hexMap[i][j].getPoint(3).x, hexMap[i][j].getPoint(3).y);
                    drawPath.lineTo(hexMap[i][j].getPoint(4).x, hexMap[i][j].getPoint(4).y);
                    drawPath.lineTo(hexMap[i][j].getPoint(5).x, hexMap[i][j].getPoint(5).y);
                    drawPath.lineTo(hexMap[i][j].getPoint(0).x, hexMap[i][j].getPoint(0).y);
                    canvas.drawPath(drawPath, paint);

                }
            }
        }
    }

绘图效果很好。要缩放我捕捉捏事件手势并更改六边形的半径,然后重新计算其顶点。要移动我只需将移位值添加到中心点并重新计算顶点。 当我有例如~30个六边形时,一切都很好。 650一切都超级慢。 我试图启用硬件加速,但它没有帮助。我试图减少invalidate()次呼叫的数量,但在我看来,这不是问题所在。问题出在drawPath上。 有什么方法可以加快速度吗?我现在没有太多时间打开opengl或者你知道一些用opengl绘制六边形的开源解决方案吗? 提前谢谢!

0 个答案:

没有答案