我正在尝试在MapView上创建圆角,并且由于默认情况下似乎没有任何方法可以执行此操作,因此我基本上在地图视图上覆盖了背景布局,如下所示:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" >
<RelativeLayout
android:id="@+id/map_holder"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/panel_rounded_corner_transparent" />
</RelativeLayout>
我的圆角drawable是这样定义的:
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/bg_rounded_corner_transparent" />
</selector>
并且drawable inside定义为:
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid
android:color="@color/transparent" />
<stroke
android:width="1dp"
android:color="@color/darkgray" />
<corners
android:radius="5dp" />
</shape>
</item>
</layer-list>
然而,问题在于,由于地图最终呈矩形而边框呈圆角,因此地图的角落从我临时边框的角落后面窥视。如何仅在边框外部设置背景颜色,同时保持面板内部透明?
澄清一下,这里有一些截图。
此屏幕截图显示最初由重叠边框“限制”的地图:
此屏幕截图用红色背景替换地图,以便更清楚地了解问题所在:
如您所见,红色(以及扩展名,地图)在边界外流血。
我可以在地图中添加1dp填充,但这并不能完全解决问题,如您所见:
由于角落是圆角的,因此部分地图仍会漏掉。它比第一个选项好很多,但并不完美 - 角落处有1个像素点。
如截图所示,超过1dp的填充不是解决方案,因为它完全会产生另一个问题:
答案 0 :(得分:3)
尝试扩展MapView,如下所示:
private class MyMapView extends MapView {
public MyMapView(Context context, String apiKey) {
super(context, apiKey);
}
@Override
public void draw(Canvas canvas) {
Path path = new Path();
RectF r = new RectF(0, 0, this.getWidth(), this.getHeight());
path.addRoundRect(r, 12, 12, Path.Direction.CW);
canvas.clipPath(path);
super.draw(canvas);
}
}
您可能需要调整path.addRoundRect()
的半径答案 1 :(得分:0)
您是否尝试过使用可设置样式的元素?看看这个:
http://developer.android.com/reference/android/R.styleable.html#DrawableCorners_bottomLeftRadius
希望这会有所帮助,这可以解决您的问题:)
答案 2 :(得分:0)
嗨,我在这里玩了几个小时,这是我的ImageView的解决方案,内部有透明框架(椭圆形),外面是纯色。我知道它是椭圆形的,但它也适用于rect。
实现一个内部有两个子节点的FrameLayout。因此形状将与ImageView重叠:
<FrameLayout
android:id="@+id/testLinearLayout"
android:layout_width="300dp"
android:layout_height="300dp">
<ImageView
android:id="@+id/mainContentImage"
android:layout_width="300dp"
android:layout_height="300dp"/>
<LinearLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:background="@drawable/shape_circle">
</LinearLayout>
</FrameLayout>
这是shape_circle.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/shape_circle_rect"/>
<item android:drawable="@drawable/shape_circle_oval"/>
</layer-list>
shape_circle_rect.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<padding
android:left="-70dp"
android:top="-70dp"
android:right="-70dp"
android:bottom="-70dp"/>
</shape>
shape_circle_oval.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<stroke android:color="#ffffff" android:width="70dp"/>
</shape>
它不是完全你要搜索的内容,但它可以提供帮助。
答案 3 :(得分:0)
希望这是woking ........阅读关于样式和开发人员的其他部分
可以帮到你