Android 1.6 Mapview не показывает трафик, пока пользователь не взаимодействует с картой - PullRequest
5 голосов
/ 27 июня 2010

У меня есть MapActivity.Если для него установлено соответствующее местоположение и уровень масштабирования, чтобы увидеть трафик, то после первого его создания ничего не отображается, пока вы не взаимодействуете с картой (не нажимаете на нее, не перетаскиваете и т. Д.), В которой обнаруживается трафик.Естественно, я хочу, чтобы после загрузки трафик отображался без какого-либо взаимодействия с пользователем, но я не смог понять, как его инициировать.Есть идеи?

От моего унаследованного класса MapActivity:

private MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.map);
 mapView = (MapView) findViewById(R.id.mapview);
 mapView.setBuiltInZoomControls(true);
 mapView.setTraffic(true);
}

А вот что в R.layout.map

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainlayout"
    android:orientation="vertical"
    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:clickable="true"
        android:apiKey="...MY API KEY HERE..."
    />
</RelativeLayout>

Ответы [ 3 ]

3 голосов
/ 02 июля 2010

postInvalidate () после подходящей задержки следует использовать в качестве обходного пути, какие времена задержки вы пробовали?

0 голосов
/ 01 ноября 2010

Я подал отчет об ошибке по этому номеру 10317 . Из моего исследования, когда вы включаете в MapView режим трафика или просмотра улиц, запускается поток для получения данных с серверов Google. Если данные не возвращаются к тому времени, когда MapView отрисовывает себя, соответствующие строки не отображаются. Взаимодействие с пользователем вызывает перерисовку, и к тому времени данные обычно присутствуют. Вызов invalidate не работает, потому что поток не запускается до тех пор, пока не завершится выполнение вашего кода (то есть кода, который устанавливает режим). Обходной путь заключается в публикации будущего сообщения для аннулирования MapView, вызывающего перерисовку, а затем, когда (надеюсь) данные присутствуют. Это исправление для потока, который выполняет выборку данных, чтобы вызвать перерисовку при получении данных.

0 голосов
/ 27 июня 2010

Я пытался найти XML attrs из MapView, но не смог их найти.

Я предполагаю, что карта не перерисовывается после использования setTraffic(true);

Попробуйте позвонить mapView.invalidate();

...