以编程方式更改可绘制对象的圆角半径

13

我有一个在xml中定义的形状:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp" 
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners
        android:bottomLeftRadius="5dp"    ##this need change
        android:bottomRightRadius="5dp"   ##this need change
        android:topLeftRadius="5dp"       ##this need change
        android:topRightRadius="5dp" />   ##this need change
</shape>
我正在创建如下对象:
Drawable shape = getResource().getDrawable(R.drawable.myshape);
我需要修改其半径(或创建具有不同圆角半径的形状)。
如何更改半径?如何以编程方式创建形状?

请查看ChrisJD在这里给出的答案,并访问GradientDrawable以获取有关以编程方式设置角落的更多信息。 - DroidBender
如果你解决了这个问题,请发布一个带有解决方案的答案并接受它。 - user
1个回答

24

我解决了我的问题。解决方案在这里:

private Drawable getShape(){
    GradientDrawable gradientDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR, new int[] { startColor,
            centerColor, endColor});
    gradientDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
    gradientDrawable.setCornerRadii(getRandomFloatArray());
    gradientDrawable.setGradientCenter(0.0f, 0.45f);

    return gradientDrawable;
}

private float [] getRandomFloatArray(){
    Random rnd = new Random();
    float[] floats = new float[8];
    for (int i =0; i < floats.length; i++){
        floats[i] = rnd.nextInt(45);
    }
    return floats;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接