setCornerRadius не работает на Android 4.2.2


Я реализовал pinch для масштабирования группы представлений, чьи дочерние представления имеют фоновые чертежи. После onScaleEnd я перерисовываю представления детей в новом масштабе, чтобы они были более четкими. Однако после повторного рисования в меньших масштабах радиусы закругленных углов слишком велики, что придает прямоугольнику неправильный вид. У меня есть код, который работает для изменения радиуса угла для всех форм, который отлично работает на моем Kindle Fire HD (на основе 4.0.3), но ничего не делает на моем Galaxy Nexus (4.2.2) телефон.

Примечание: Я не мутирую drawable, потому что я хочу, чтобы все drawable, основанные на этом ресурсе, изменили свой внешний вид, когда я это делаю.

Я посмотрел на: изменение радиуса угла чертежа программно и несколько других сообщений, но ничто даже не намекает на различное поведение на разных устройствах.

Вот код:

    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 2

1 ответ:

Чтобы обойти это, я, наконец, просто написал код для повторного создания Рисоваемых объектов, когда они мне нужны. Это было необходимо в любом случае, чтобы изменить все угловые радиусы, уменьшить/увеличить количество теневых прямых и т. д.