如何在运行时设置Drawable中的Corner?

时间:2016-01-29 13:22:17

标签: java android android-drawable

我想在运行时编辑布局的背景。我的图像可绘制在课堂上,我想设置图像的角落,如布局的背景。怎么做?

5 个答案:

答案 0 :(得分:1)

  1. 首先使用 getBackground()
  2. 从您的视图中获取背景
  3. 将其投射到GradientDrawable变量。
  4. 最后用值调用方法 setCornerRadius(浮点值)
  5. setCornerRadius(浮点值)会将所有四个角设置为相同的值。

    所以它也有方法setCornerRadii(float [] radius),它可用于设置所有四个边的角,从左上角,右上角,右下角,左下角;

    setCornerRadii(float [] radiusii)

      

    指定4个角中每个角的半径。对于每个角,数组包含2个值,[X_radius,Y_radius]。角落按左上,右上,右下,左下排序。仅当形状为RECTANGLE类型时才会使用此属性。

    GradientDrawable drawable = (GradientDrawable) view.getBackground();
    drawable.setCornerRadii(radii);
    

    float values[] = {1.1f, 2.2f, 1.5f, 3.3f};
    GradientDrawable drawable = (GradientDrawable) view.getBackground();
    drawable.setCornerRadii(values);
    

    这意味着,左上角为1.1f,右上角为2.2f,右下角为1.5f,最后左下角为3.3f。

答案 1 :(得分:1)

试试这个:

GradientDrawable bg = (GradientDrawable) relative_layout.getBackground();
bg.setCornerRadii();

答案 2 :(得分:0)

为普通和弯曲背景创建drawables资源,并将它们放在res/drawable/文件夹中。

例如:

<强> box.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
</shape>

<强> box_curved.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="5dp" />
</shape>

然后在运行时,通过以下方式更改背景:

view.setBackground(getResources().getDrawable(R.drawable.box));

view.setBackground(getResources().getDrawable(R.drawable.box_curved));

答案 3 :(得分:0)

int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    setBackgroundDrawable();
} else {
    setBackground();
}

请参阅:https://stackoverflow.com/a/11947755/3329488

答案 4 :(得分:0)

以编程方式创建Shape Drawable

public static void createShapeDrawable(View v, int backgroundColor, int borderColor)
    {
        GradientDrawable shape = new GradientDrawable();
        shape.setShape(GradientDrawable.RECTANGLE);
        shape.setCornerRadii(new float[] { 8, 8, 8, 8, 0, 0, 0, 0 }); // set corner Radious 
        shape.setColor(backgroundColor);
        shape.setStroke(3, borderColor);
        v.setBackgroundDrawable(shape);
    }