setCornerRadius不适用于Android 4.2.2

时间:2013-05-31 18:30:20

标签: android drawable cornerradius

我已经实现了缩放以缩放其子视图具有背景绘制的ViewGroup。在onScaleEnd上,我以新的比例重绘子视图,因此它们更清晰。然而,在以较小比例重新绘制之后,圆角半径太大,使得矩形形状具有错误的外观。我的代码可用于更改我的Kindle Fire HD(基于4.0.3)上正常工作的所有形状的转角半径,但在我的Galaxy Nexus(4.2.2)手机上没有任何作用。

注意:我不会改变drawable,因为我确实希望所有基于该资源的drawable在我这样做时改变它们的外观。

我看过:change corner radius of drawable programmatically 和其他一些帖子,但没有任何暗示设备的不同行为。

以下是代码:

    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中的错误吗?

1 个答案:

答案 0 :(得分:1)

为了解决这个问题,我终于编写了代码,以便在需要时重新创建Drawables。无论如何,这都需要改变所有的角半径,收缩/增加阴影的数量等等。