自定义列表视图

Emi*_*der 3 android

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

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

我的绘图代码看起来像这样:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawRect(rect, paint);
}
Run Code Online (Sandbox Code Playgroud)

Ret*_*ier 6

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

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

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