Android:在自定义视图中使onDraw()高效

时间:2015-01-31 19:48:19

标签: android bitmap android-custom-view

我在android中实现自己的自定义视图。我把我的观点划分为一个由超过500个单元组成的网格。每个单元格由一个Rect表示。现在我将瓷砖设置为每个单元格的背景。因此,为了设置整个视图的背景,我用图像填充每个单元格。在它上面我有一些可移动的物品。因此,每当我移动一个项目时,我必须使整个视图无效()以更新元素的位置。因此调用onDraw(),这会导致再次使用位图图像填充网格的每个单元格。我想避免这种情况,因为我认为这在计算上非常昂贵(为超过500个单元格绘制位图)。是否有类似画布的快照或可用于使视图onDraw()有效的东西。

这是我的onDraw()函数

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if(!mSizeChanged)
    {
        return;
    }
    // For filling all the cells of the grid. mGraphs.getCells() returns cell list. 
    // Drawing done under this loop is never changed.
    for(CenterRect rect : mGraphs.getCells())
    {
        //Logic for drawing different bitmaps
        if(rect.getRow() < 3)
        {
            canvas.drawBitmap(mud, null, rect.getRect(), null);
        }
        else if(rect.getRow() == 3)
        {
            canvas.drawBitmap(mudGrass, null, rect.getRect(), null);
        }
        else if(rect.getRow() < mMidRow) {
            canvas.drawBitmap(grass, null, rect.getRect(), null);
        }
        else if(rect.getRow() == mMidRow) {

            canvas.drawBitmap(grassWater, null, rect.getRect(), null);
        }
        else {
            canvas.drawBitmap(water, null, rect.getRect(), null);
        }

    }
    //Drawing movable elements
    for(Element element : testElements)
    {
        canvas.drawBitmap(element.getBitmap(mContext), null, element.getRect(), null);
    }
} 

0 个答案:

没有答案