2010-09-09 47 views
10

我试图绘制一个带有边框的圆角矩形,它使用延伸ShapeDrawable的类(请参阅here),并且一切正常,除了shaperawable似乎正在切断某些边界,因为形状本身不会超出这些范围。ShapeDrawable内的偏移形状

是否没有某种方法来抵消shaperawable开始绘制的位置,以便在形状本身和画布的边界之间有一些填充?我已经尝试将ShapeDrawable.setBounds都设置为大于Shape和ShapeDrawable.setPadding的固有尺寸,但似乎无法获取任何位置。我应该继承可绘制而不是?

回答

21

你可以用你塑造绘制插图与(inset_shape.xml):

<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/your_shape_drawable" android:insetBottom="10dip" 
    android:insetLeft="10dip" android:insetRight="10dip" android:insetTop="10dip" 
    android:visible="true" /> 

然后,只需使用inset_shape根据您的需要。

+2

谢谢,我在代码中创建了一个InsetDrawable:[newInsetDrawable(shape,x,x,x,x)],并通过它来解决它。 InsetDrawable似乎有点隐藏在文档中 - 非常有帮助 – 2010-09-09 20:38:39

+2

我刚刚发现,不是传递android:drawable,而是可以嵌套drawable,所以你不需要两个文件。不知道为什么我认为这是不可能的。 – velis 2016-06-08 07:31:19

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> 
+0

填充不适合我 – Gilian 2017-04-17 21:02:16