1

トピックがわかりにくい場合は申し訳ありませんが、必要なレイアウトを説明するためにどの単語を使用すればよいかわかりません。

現在、マップビューに中空レイアウトをオーバーレイする必要があるプロジェクトに取り組んでいます。中空レイアウトは、遠距離の位置ポイントを表示するために使用します。私が意味することを示すために画像を投稿します。

ストロークオーバーレイ付きのマップビュー

基本的に、画面全体がMapviewで塗りつぶされ、オーバーレイレイアウトは、画像に表示されているように、中央を覆わずにオーバーレイする必要があります。

これがxmlで、上記のようなレイアウトを作成するために行ったことを示しています。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<com.google.android.maps.MapView
android:id="@+id/MapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="..."
/>

   <View
   android:layout_width="320dip"
   android:layout_height="50dip"
   android:layout_gravity="center_horizontal|top"
   android:background="#800ff4ff"
   android:textColor="#ffffffff" />


 <View
    android:layout_width="320dip"
    android:layout_height="50dip"
    android:layout_gravity="center_horizontal|bottom"
    android:background="#800ff4ff"
    android:textColor="#ffffffff"
  />

<View
    android:layout_width="50dip"
    android:layout_height="520dip"
    android:layout_gravity="center_vertical|right"
    android:background="#800ff4ff"
    android:textColor="#ffffffff" />

 <View
    android:layout_width="50dip"
    android:layout_height="520dip"
    android:layout_gravity="center_vertical|left"
    android:padding="20dip"
    android:background="#800ff4ff"
    android:textColor="#ffffffff" />

</FrameLayout>

フレームレイアウトを使用して、レイアウトが他のレイアウトをオーバーレイできるようにし、各エッジに4つの個別のレイアウトを作成して、本当に必要なもの(中央が空)をシミュレートします。誰がレイアウトを4辺だけにし、中央を見えないようにするのかわかりません。誰か助けてくれる人がいたら、私にアドバイスをください。ありがとう。

4

3 に答える 3

6

要件を満たす、使用できる別の簡単なオプションがあります。

  • 形状が定義された新しいドローアブル リソースを作成します。このリソース (XML ファイル): margin_border.xmlを呼び出し、drawable フォルダーの下に配置します。この XML の内容:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >
    
        <stroke
            android:width="50dp"
            android:color="#800ff4ff" />
    
        <solid android:color="#00000000" />
    
    </shape> 
    

    説明: この形状は、内部レイアウトの境界線/フレームとして機能します。境界線である「ストローク」属性は任意の色にすることができ、「ソリッド」属性には透明な色があります。

  • 次に、メイン レイアウトでこの形状を使用します。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <com.google.android.maps.MapView
            android:id="@+id/MapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:apiKey="..."
            android:clickable="true"
            android:enabled="true" />
    
        <!-- Set hollow layout -->
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:background="@drawable/margin_border"
            android:padding="50dp" >
        </LinearLayout>
    
    </RelativeLayout>
    

    説明: 主なレイアウトは RelativeLayout です。ここに示されているように true に設定されているすべての方向の alignParent フラグを除いて、MapView は変更されませんでした。

    最後に、中央に必要なレイアウトを使用します。背景がシェイプ ドローアブルを参照しているときに LinearLayout を使用しました。

    注: このレイアウトのパディングは、シェイプのストローク幅と同じにする必要があります。この場合は 50dp です

これは私の携帯でどのように見えるかです(スクリーンショット):

ここに画像の説明を入力

于 2012-08-21T21:35:28.863 に答える
1

これはFrameLayoutを使用して実現できますが、framelayoutでは、linearlayoutやrelativelayoutほどの自由度はありません。したがって、どちらかのレイアウトをコンテナとして使用し、描画可能な形状を背景として使用することをお勧めします。ドローアブル形状は、必要な効果を生み出します。
シェイプドローアブルのサンプルコードは次のとおりです。

    <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid
        android:color="#00000000" />
    <stroke 
        android:width="50dp"
        android:color="#ae00ffff"/>
</shape>

ここで、ストロークは画面上の半透明の領域として機能します。要件に合わせて幅を変更できます。

于 2012-08-21T21:22:28.187 に答える
0

私の推奨事項は、次のように RelativeLayout を使用することです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<MapView android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</MapView>

<FrameLayout
    android:id="@+id/top"
    android:layout_width="fill_parent"
    android:layout_height="50dip" >
</FrameLayout>

<FrameLayout
    android:id="@+id/bottom"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    android:layout_alignParentBottom="true" >
</FrameLayout>

<FrameLayout
    android:id="@+id/left"
    android:layout_width="50dip"
    android:layout_height="wrap_content"
    android:layout_above="@id/bottom"
    android:layout_below="@id/top" >
</FrameLayout>

<FrameLayout
    android:id="@+id/right"
    android:layout_width="50dip"
    android:layout_height="wrap_content"
    android:layout_above="@id/bottom"
    android:layout_alignParentRight="true"
    android:layout_below="@id/top" >
</FrameLayout>

</RelativeLayout>

少なくともそれは私が考えることができる最も簡単な方法です!

于 2012-08-21T18:43:29.913 に答える