如何为视图添加角点

时间:2012-05-20 00:09:39

标签: android

我在视图周围添加了一个完整的边框,但我需要添加角落,如下图所示:

enter image description here

我的意思是红色角落。

我尝试调整以下边框xml,但它不起作用:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
    <stroke android:width="10dp" android:height="10dp" android:color="#B22222" /> 
    <solid android:color="#FCE6C9" /> 
    <corners android:radius="20dp"  /> 
</shape>

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

我认为不可能使用ShapeDrawable来执行此操作,因为它需要您在drawable本身上使用某种边距或填充。实际上有一个padding属性,但不幸的是,这只会影响View的内容,而不会影响drawable本身。

话虽如此,一个简单的解决方案是创建一个9补丁并将其作为背景应用于TextView。仅用于演示目的:使9补丁看起来像这样:

Red rounded corner 9-patch example


修改 第二个想法,实际上还有另一个选项依赖于使用LayerDrawable来创建所需的效果。创建它有点乏味,我怀疑它比使用9补丁更有效,但至少你不需要渲染图像,这意味着如果你需要制作例如颜色的变化,更直接。

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

    <item android:drawable="@drawable/rounded" />
    <item android:drawable="@android:color/white" android:left="30dp"
        android:right="30dp" />
    <item android:bottom="30dp" android:drawable="@android:color/white"
        android:top="30dp" />
    <item android:bottom="30dp" android:left="10dp" android:right="10dp"
        android:drawable="@color/pink" android:top="30dp" />
    <item android:bottom="10dp" android:left="30dp" android:right="30dp"
        android:drawable="@color/pink" android:top="10dp" />

</layer-list>

一些细节:@drawable/rounded是您自己发布的代码段。以下两个项目只是带有偏移的白色矩形,以创建白色边缘。现在,由于这些也将覆盖粉红色表面,我们需要两个更多的粉红色矩形(同样具有特定的偏移)来对抗它。结果是背景看起来与您在问题中显示的内容完全一样。

请注意,您可能希望了解是否可以对此进行优化。至少我建议不要对偏移量进行硬编码(就像我为简单起见一样),但是将它们存储在dimens.xml文件中,这样您就可以通过ShapeDrawable引用这些值来保持这些值的集中性和一致性。和LayerDrawable

附录:在ICS之前(或可能是pre-Honeycomb)设备上,直接引用android:drawable属性的颜色似乎存在问题。但是,您可以通过设置另一个drawable(无论是9-patch还是ShapeDrawable)来表示这种颜色,从而轻松解决这个问题。例如,在上面的代码段中,您可以将android:drawable="@color/pink"替换为android:drawable="@drawable/color_pink",其中color_pink可以只是一个包含以下内容的xml文件:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
    <solid android:color="#FCE6C9" /> 
</shape>

显然,您需要对LayerDrawable中引用的所有其他颜色执行相同的操作。测试姜饼2.3.7。

答案 1 :(得分:0)

我会创建一个9补丁文件并将其设置为主容器的背景。这样做的步骤是。

  1. 您可以在烟花,插画家或您喜欢的任何图像编辑软件中创建您想要的背景。
  2. 然后裁剪图稿,使图稿周围只有1个像素的边框。保存为png。
  3. 打开计算机上的android sdk文件夹中的draw9patch.bat文件C:\ Program Files(x86)\ Android \ android-sdk \ tools。
  4. 打开您的png文件。然后,您可以使用鼠标单击外部1像素边框,这将使单击的像素变为黑色。在顶部和底部或左右两侧都有黑色像素的区域将是拉伸的区域。在你的情况下,你只想让中间区域没有红色拉伸。
  5. 我个人的偏好是打开上面的文件并将其另存为9补丁文件。然后在我的照片编辑软件中打开它,以与上面相同的方式创建1像素粗线。它更快更精确。
  6. 最后将文件添加到drawable文件夹中。然后将主视图容器的背景设置为drawable。
  7. 那应该是它。希望有所帮助。