0

Ice Cream Sandwich(そしておそらくHoneycomb)から始めて、ScrollViewの動作の変化を観察します。

Gingerbreadでは、スクロール時に子のonDraw()が呼び出され、クリッピングrectはスクロール位置を適切に考慮していました。

ICSでは、スクロール時に子のonDraw()が呼び出されることはありません。さらに、クリッピングrectには常にフルビューが含まれます。

古い動作を復元する方法を知っていますか?

前もって感謝します、

セバスチャン

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) {
  }
}

その後、スクロール時に子のonDraw()が呼び出され、cliprectが正常になります。

于 2012-09-13T18:52:10.213 に答える