Android ShapeDrawable中的偏移形状

Android ShapeDrawable中的偏移形状,android,drawable,shapes,Android,Drawable,Shapes,我试图用一个扩展ShapeDrawable的类来绘制一个有边框的圆角矩形(请参见),除了ShapeDrawable似乎在切断一些边框外,其他一切都正常工作,因为形状本身没有延伸到这些边框之外 是否有某种方法可以偏移shapedrawable开始绘制的位置,以便在形状本身和画布的边界之间有一些填充?我尝试了ShapeDrawable.setBounds和ShapeDrawable.setPadding,使其大于形状的固有大小,但似乎没有取得任何效果。我应该改为子类化Drawable吗?您可以使用i

我试图用一个扩展ShapeDrawable的类来绘制一个有边框的圆角矩形(请参见),除了ShapeDrawable似乎在切断一些边框外,其他一切都正常工作,因为形状本身没有延伸到这些边框之外


是否有某种方法可以偏移shapedrawable开始绘制的位置,以便在形状本身和画布的边界之间有一些填充?我尝试了ShapeDrawable.setBounds和ShapeDrawable.setPadding,使其大于形状的固有大小,但似乎没有取得任何效果。我应该改为子类化Drawable吗?

您可以使用inset(inset\u shape.xml)来包装您的形状Drawable:



然后根据需要使用插图形状。

在您的可绘图…中尝试此操作

<?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>


谢谢,我在代码中创建了一个InsertDrawable:[新的InsertDrawable(shape,x,x,x,x)],并传递了它,它解决了这个问题。InsertDrawable在文档中似乎有点隐藏-非常有用,我刚刚发现,除了传递android:drawable,还可以嵌套drawable,因此不需要两个文件。我不知道为什么我会认为这是不可能的。
<?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>