我在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);
}
}