簡體   English   中英

如何在運行時在Drawable中設置Corner?

[英]How to set Corner in Drawable at runtime?

我想在運行時編輯布局的背景。 我的圖像可繪制在類中,我想將圖像設置為具有角點(如布局背景)。 這個怎么做?

  1. 首先使用getBackground()從您的視圖獲取背景。
  2. 將其強制轉換為GradientDrawable變量。
  3. 最后使用該值調用方法setCornerRadius(float value)

setCornerRadius(float value)將所有四個角設置為相同的值。

因此它也具有setCornerRadii(float [] radii)方法,該方法可用於設置從左上角,右上角,右下角,左下角四個側面的角。

setCornerRadii(float [] radii)

為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.2,右下角為1.5f,最后左下角為3.3f。

嘗試這個:

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

為法線和彎曲背景創建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));
 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

以編程方式創建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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM