2011-10-31 52 views
0

我想上一個MapView創建圓角,並且因爲似乎沒有什麼辦法在默認情況下做到這一點,我基本上覆蓋佈局與背景在我的地圖視圖,像這樣:如何創建一個外部呈方形並且裏面有圓角的drawable?

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

我圓角繪製的定義是這樣的:

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

和繪製內部被定義爲:

<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填充到地圖,但這並不能完全解決問題,因爲你可以在這裏看到:

enter image description here

由於邊角圓潤,地圖的部分繼續泄漏出。它比第一個選項好很多,但並不完美 - 角落處有1個像素點。

由於該截圖顯示,超過1DP填充是不是一個解決方案,因爲它完全是創建了另一個問題:

enter image description here

+1

您可以發佈它的屏幕截圖? – FoamyGuy

+0

使用填充。因此,地圖視圖將保留在您的界限內 – blessenm

+0

用一些照片更新了帖子。 Blessenm,我在發佈原始問題後不久就想到了你的建議,但這並不能完全解決我的問題。 – Catherine

回答

2

嘗試延長的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()

+0

這很好用 –

0

嗨,我玩這裏幾個小時左右,這裏是我的解決方案ImageView與transp內部沒有框架(橢圓形),外部是純色。我知道這是一個橢圓形,但它也適用於矩形。

實現與內部兩個孩子的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> 

它不是完全是你在尋找什麼,但它可以幫助。

相關問題