Android Googleマップ:任意の形式の情報ウィンドウを作成します



最近、Googleマップの情報ウィンドウを作成する必要がありました。このウィンドウでは、背景が画像、形状もそれぞれ設定されています。 最初は、サードパーティのライブラリを使用する必要があると考えましたが、実際にはこれを行いたくなかったので、標準ツールを使用してタスクを完了することにしました。 それが判明したように、それは非常に簡単に解決されます。



スタイル


まず、ウィンドウのスタイルを明示的に設定します(正直に言うと、拡大せずにTheme.Lightスタイルを使用すると、同じ効果が得られますが、これがどこでも正しく機能するかどうかを知っているので、パラメーターを明示的に指定する方がよいでしょう)。 これを行うには、 値/スタイルに次のスタイルを追加します



<style name="TransparentBackground" parent="android:Theme.Light"> <item name="android:windowIsTranslucent">true</item> <!--   --> <item name="android:windowBackground">@android:color/transparent</item> <!--    --> <item name="android:windowContentOverlay">@null</item> <!--     --> <item name="android:windowNoTitle">true</item> <!--   --> <item name="android:windowIsFloating">true</item> <!--      --> <item name="android:backgroundDimEnabled">false</item> <!--   --> </style>
      
      





背景


背景の画像が必要になりました。たとえば、「google」ドライブを使用しました(Paint.NETで透明度をチェックします)。







では、プロジェクトのres / drawable フォルダーstar.pngを配置ます



直接情報ウィンドウの説明


まず、ウィンドウのレイアウトについて説明します。そのために、 res / layoutフォルダーのコンテンツの下にファイルcustom_infowindow.xmlを作成します。



 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:layout_height="162dp" android:layout_width="150dp" android:layout_marginLeft="15dp" android:src="@drawable/star" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginTop="80dp" android:layout_marginLeft="51dp" android:textSize="12sp" android:text="@string/hello_world" /> </RelativeLayout>
      
      





レイアウトでは、画像をImageViewとして配置します。 情報ウィンドウの情報の例として、「Hello world!」というテキストをTextViewに設定します。 インデントは、必要な方法でレイアウト要素の表示を揃えるために使用されます。 また、真ん中に星が色で塗りつぶされている場合、説明の順序により、テキストが画像の上部に表示されます。 例:







レイアウトを描く


InfoWindowAdapterを定義します



  @Override public View getInfoWindow(Marker marker) { ContextThemeWrapper wrapper = new ContextThemeWrapper(getApplicationContext(), R.style.TransparentBackground); LayoutInflater inflater = (LayoutInflater) wrapper.getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.custom_infowindow, null); return layout; } @Override public View getInfoContents(Marker marker) { return null; }
      
      





ここでは、レイアウトのテーマを設定するためにContextThemeWrapperを使用し、その後、ウィンドウとなるインフレータとしてビューを作成します( getInfoContentsではなくgetInfoWindowでレンダリングを記述することが重要です。 )



小物用ケース


基本的に、すべて、今度はsetInfoWindowAdapter(...)メソッドを使用してアダプターをGoogleMapに設定し、結果をお楽しみください=)。



All Articles