圆角半径和代码中的项目图层绘制方式

4
我有这个XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:drawable="@drawable/back" />
    <item>
        <shape>
            <solid/>
            <stroke android:width="1dip" android:color="#25786" />
            <corners android:radius="10dip"/>
            <padding android:left="0dip" android:top="0dip" 
                     android:right="0dip" android:bottom="0dip" />
        </shape>
    </item> 
</layer-list> 

现在我通过代码来实现:
Drawable[] layers = new Drawable[2];

    ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
    sd1.getPaint().setColor(0xFFFFFFFF);
    sd1.getPaint().setStyle(Style.STROKE);
    sd1.getPaint().setStrokeWidth(1);

    layers[0] = sd1;

    LayerDrawable composite = new LayerDrawable(layers);

但我无法编写 <corners android:radius="10dip"/><item android:drawable="@drawable/back" /> 的代码。

如何做到呢?

编辑 1

Drawable[] layers = new Drawable[2];

ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
sd1.getPaint().setColor(0xFFFFFFFF);
sd1.getPaint().setStyle(Style.STROKE);
sd1.getPaint().setStrokeWidth(1);
sd1.getPaint().setPathEffect(new CornerPathEffect(10));

layers[1] = sd1;
layers[0] = getResources().getDrawable(R.drawable.pie_chart_back);

LayerDrawable composite = new LayerDrawable(layers);

要从代码中设置角落,请参见(Gradient Drawables):https://dev59.com/-V7Va4cB1Zd3GeqPNtp0 - samus
2个回答

5

就像在您的XML中一样,您需要三个Drawable,而不是一个。 其中一个是包含其他内容的LayerDrawable。 另一个缺少的可能是一个BitmapDrawable,具体取决于@drawable/back

您正在寻找的角落效果位于您的DrawablePaintCornerPathEffect中,请参见Paint.setPathEffect


@Goofy 你说得对,LayerDrawable 已经存在了,所以只缺少 BitmapDrawable。-- 你所说的“CornerPathEffect不存在”是什么意思? - class stacker
对不起,我没有仔细看清楚,请您检查我的编辑并告诉我现在是否可以了? - Goofy
@Goofy,你的SDK和AVD比我更能告诉你它是否正在工作。 ;) - class stacker

0

试试这个...!

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

    <solid android:color="#e1e1e1" />

    <stroke
        android:width="2dp"
        android:color="#808080" />

    <corners android:radius="10dp" />

    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />

</shape>

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