自定义列表视图

时间:2012-03-11 13:43:44

标签: android

我正在尝试在ListView上方绘制一个叠加层。所以我采用了最明显的方法,并将我的自定义绘图代码放在我的ListView子类中的super.onDraw(canvas)下面。

令我惊讶的是,列表显示在我的自定义绘图上方。我知道这可以通过将ListView包装在FrameLayout中轻松完成,但我认为不需要膨胀另一个视图。修复和解释为什么我遇到这个问题会很棒,谢谢!

我的绘图代码如下所示:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawRect(rect, paint);
}

2 个答案:

答案 0 :(得分:6)

关于ListView的事情是它实际上并没有绘制列表内容。这是由绑定到列表的适配器处理的 - 或者更具体地说是由填充ListView的适配器创建的视图。

ListView的onDraw在创建和显示包含的视图之前发生。

在ListView之上绘制内容可能很昂贵,因为您要在已经复杂的View上方合成另一个层。将另一个视图置于顶部(如您所建议使用FrameLayout)可能是您尝试执行操作的“最佳”方式,或者(取决于您尝试实现的效果),您可以修改适配器或视图显示您尝试叠加的数据。

答案 1 :(得分:4)

覆盖dispatchDraw代替onDraw似乎可以做你想要的事情:

@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);
    ...
}