我制作了一个信使应用程序,我为每条消息制作了一个具有这种形状的背景:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners
android:bottomLeftRadius="80dp"
android:bottomRightRadius="80dp"
android:topRightRadius="80dp"
android:topLeftRadius="80dp"
/>
<solid android:color="#fff"/>
但问题是当消息很长时,角落很大,这使得我的消息布局很糟糕!我想知道是否有另一种方法来制作圆形背景!
答案 0 :(得分:1)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/headerColor" />
<corners android:radius="5dp" />
</shape>
答案 1 :(得分:0)
您可以使用9-patch drawables。
这些是png文件,它们允许您定义无法拉伸的区域以及与视图大小无关的区域。
你可以在这里阅读: https://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
您可以在此处阅读有关如何创建它的信息: https://developer.android.com/studio/write/draw9patch.html
9-patch drawables通常用于Adnroid SDK标准视图。
答案 2 :(得分:0)
您可以创建一个扩展Button类的自定义按钮类,然后覆盖onLayout()
方法可能是这样的......基本上你设置的是corner radius = height/2
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if(this.getBackground()!=null && this.getBackground() instanceof LayerDrawable) {
LayerDrawable layerDrawable = (LayerDrawable)(this.getBackground().mutate());
GradientDrawable gd1 = (GradientDrawable)layerDrawable.findDrawableByLayerId(R.id.layer_one);
roundEdgeGradientDrawable(gd1, this.getHeight());
}
}
public static GradientDrawable roundEdgeGradientDrawable(GradientDrawable bgShape, float height) {
if (bgShape != null) {
float radius = height / 2;
float[] radii = {radius, radius, radius, radius, radius, radius, radius, radius};
bgShape.setCornerRadii(radii);
}
return bgShape;
}