子ビューにバックグラウンド ドローアブルがある ViewGroup をズームするピンチを実装しました。onScaleEnd で、子ビューを新しいスケールで再描画して、より鮮明にします。ただし、小さい縮尺で再描画すると、丸みを帯びた角の半径が大きすぎて、長方形の形状が正しく表示されなくなります。Kindle Fire HD (4.0.3 ベース) で正常に動作するすべての形状の角の半径を変更するコードがありますが、Galaxy Nexus (4.2.2) 電話では何もしません。
注:私はドローアブルを変更しません。これを行うと、そのリソースに基づくすべてのドローアブルの外観を変更したいからです。
私が見たのは、ドローアブルのコーナー半径をプログラムで変更すること と、他のいくつかの投稿ですが、デバイス間で異なる動作を示唆するものは何もありません。
コードは次のとおりです。
final LayerDrawable layerDrawable = (LayerDrawable) context.getResources().getDrawable(drawableId);
final Drawable drawable = layerDrawable.findDrawableByLayerId(drawableLayerId);
if (drawable instanceof GradientDrawable) {
final float newRadius = nodeScale > SMALL_TREE_NODE_LAYOUT_THRESHOLD ? normalRadius : smallRadius;
// this doesn't work
((GradientDrawable) drawable).setCornerRadius(newRadius);
// this doesn't work either
((GradientDrawable) drawable).setCornerRadii(new float[] {newRadius, newRadius, newRadius, newRadius, newRadius, newRadius, newRadius, newRadius });
}
これは 4.2.2 のバグですか?