0

从 Ice Cream Sandwich(可能还有 Honeycomb)开始,我观察到 ScrollView 的行为发生了变化。

在 Gingerbread 中,孩子的 onDraw() 在滚动时被调用,并且剪切矩形正确地考虑了滚动位置。

在 ICS 中,滚动时永远不会调用孩子的 onDraw()。此外,剪裁矩形始终包含完整视图。

你知道我怎样才能恢复旧的行为吗?

提前致谢,

塞巴斯蒂安

4

1 回答 1

1

好的,将输入问题,我有一个想法,它似乎解决了“问题”。

它与硬件加速有关。您需要覆盖 ScrollView,并在其构造函数中禁用硬件加速,如下所示:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  try {
    Method setLayerType = getClass().getMethod("setLayerType", Integer.TYPE, Paint.class);
    setLayerType.invoke(this, View.LAYER_TYPE_SOFTWARE, null);
  } catch (NoSuchMethodException e) {
  } catch (IllegalArgumentException e) {
  } catch (IllegalAccessException e) {
  } catch (InvocationTargetException e) {
  }
}

之后在滚动的时候会调用child的onDraw(),clip rect就可以了!

于 2012-09-13T18:52:10.213 回答