从 Ice Cream Sandwich(可能还有 Honeycomb)开始,我观察到 ScrollView 的行为发生了变化。
在 Gingerbread 中,孩子的 onDraw() 在滚动时被调用,并且剪切矩形正确地考虑了滚动位置。
在 ICS 中,滚动时永远不会调用孩子的 onDraw()。此外,剪裁矩形始终包含完整视图。
你知道我怎样才能恢复旧的行为吗?
提前致谢,
塞巴斯蒂安
从 Ice Cream Sandwich(可能还有 Honeycomb)开始,我观察到 ScrollView 的行为发生了变化。
在 Gingerbread 中,孩子的 onDraw() 在滚动时被调用,并且剪切矩形正确地考虑了滚动位置。
在 ICS 中,滚动时永远不会调用孩子的 onDraw()。此外,剪裁矩形始终包含完整视图。
你知道我怎样才能恢复旧的行为吗?
提前致谢,
塞巴斯蒂安
好的,将输入问题,我有一个想法,它似乎解决了“问题”。
它与硬件加速有关。您需要覆盖 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就可以了!