[Android]FragmentでMapViewを使った時の問題と解決策

Mar 30, 2015   #Android 

久しぶりの更新です。最近ぜんぜん更新しないまま、だいぶ経ってしまいました。

書きたい事は結構あるのに、忙しいとかを理由にサボってしまい…。

またちょいちょい更新していこう。

今回は、AndroidのMapViewを使ったアプリ開発の際に起きた問題とその解決策について、自分なりですが対応した方法を書いてみました。

問題の方は、Map表示のMapViewをロードする際に画面が黒や白っぽく一瞬チラッと表示される現象があり、動作上は特に問題ないのですが、ちょっと動きとして何か気持ち悪いなと思ったので対応出来ないかと調べて対応してみました。

ちなみに発生する端末は、最近の端末では発生せず、API Level14/4.0系と、現在より3年くらい前の機種で現象が起きていたので、単純に端末のスペックが問題なんだろうなとも思ってます。

実際に対応した方法ですが、Fragmentで利用するMapViewの上に透過したレイアウトを重ねておく事で、下に表示されたマップの描画処理を抑える事ができ、画面の黒表示などを消す事が出来ました。

※ただ、今回の現象を抑える事は出来ましたが、これが本当に解決策として正しいのかかなり怪しいので、詳しく知っている方がいればぜひ教えて頂きたいです。

  • レイアウトファイル: (fragment_map_sample.xml)
<LinearLayout
    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"
    android:orientation="vertical"
    tools:context="com.dtdweb.mapfragmentsample.fragments.MapSampleFragment">

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

        <com.google.android.gms.maps.MapView
            android:id="@+id/mapview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

        <TextView
            android:id="@+id/transparent_layout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/translucent_background" />

    </FrameLayout>

</LinearLayout>
  • 完成画面:

20150331_fragment_mapview_sample

画面の通り見かけ上は変わらず、またFragmentを切り替えた際も画面のチラつきを抑える事が出来ました。

(ActivityやFragmentのソースコードについてはgitにアップしております)

もうちょっと調べて、他に方法がないか調べてみる必要がありそうです…。

参考

サンプルで使っているMapViewはGoogle Map API v2を使用

Google Maps Android API  |  Google Developers

サンプルのソースコードは下記リポジトリに追加しております。

android/Fragment-MapViewSample/MapFragmentSample