Пример Android MapView + Tab - PullRequest
       30

Пример Android MapView + Tab

3 голосов
/ 08 января 2010

мне нужно иметь вид карты на вкладке. В прикрепленном примере показано, как это сделать, если использовать намерения. Теперь я хочу изменить уровень масштабирования карт (ы). Как я могу это сделать, хотя я использую намерения (или там полностью другое решение)?

Код активности:

public class TabMapsExample extends TabActivity {    
    TabHost mTabHost;        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);  
        Context ctx = this.getApplicationContext();         
        //tab 1
        mTabHost = getTabHost();
        TabSpec tabSpec1 = mTabHost.newTabSpec("tab_test1");
        tabSpec1.setIndicator("Map1");
        Intent i1 = new Intent(ctx, MapTabView.class);
        tabSpec1.setContent(i1);
        mTabHost.addTab(tabSpec1);          
        //tab2
        mTabHost = getTabHost();
        TabSpec tabSpec2 = mTabHost.newTabSpec("tab_test1");
        tabSpec2.setIndicator("Map2");
        Intent i2 = new Intent(ctx, MapTabView.class);
        tabSpec2.setContent(i2);
        mTabHost.addTab(tabSpec2);          
        //tab 3
        mTabHost = getTabHost();
        TabSpec tabSpec3 = mTabHost.newTabSpec("tab_test1");
        tabSpec3.setIndicator("Map");
        Intent i3 = new Intent(ctx, MapTabView.class);
        tabSpec3.setContent(i3);
        mTabHost.addTab(tabSpec3);    
    }
}

Код макета:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/maptablayout" android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="fill_parent" android:layout_width="fill_parent"
        android:background="#000000" android:orientation="vertical">
        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent" android:layout_height="50px"
            android:id="@+id/textview" />
        <com.google.android.maps.MapView
            android:id="@+id/mapview" android:layout_width="fill_parent"
            android:layout_height="fill_parent" android:clickable="true"
            android:apiKey="" />
    </LinearLayout>
</RelativeLayout>

ТНХ

Ответы [ 3 ]

1 голос
/ 08 января 2010

Попробуйте использовать MapController :

    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    MapController mapController = mapView.getController();
    mapController.setZoom(10);

См. Также Использование Google Maps в Android

UPDATE
Вы создаете несколько экземпляров одного и того же макета, и возникает проблема с получением необходимого экземпляра MapView по id. Можете ли вы просто использовать отдельные макеты для каждой вкладки? или создавать их динамически?

1 голос
/ 08 января 2010

@ juri: Может ли намерение также получать данные вне onCreate ()? (например, чтобы динамически устанавливать уровень масштабирования во время выполнения, а не только при создании намерения)

1 голос
/ 08 января 2010

Масштабирование должно быть возможно либо путем активации элементов управления масштабированием в MapView, и позволить вашему пользователю увеличивать или уменьшать масштаб, либо программно, используя

mapView.getController().zoomIn();

или

mapView.getController().zoomOut();

или

mapView.getController().setZoom(...);

В качестве альтернативы вы можете передать свои намерения дополнительным данным извне. Я просто догадываюсь сейчас, но в принципе вы могли бы сделать что-то вроде

Intent intent = new Intent(this, MyMapActivity.class); //this is just one way of specifying it
intent.putExtra(MyMapActivity.ZOOM_LEVEL_CONSTANT, 10);
startActivity(intent);

В onCreate (...) вашей MyMapActivity вы можете затем прочитать переданные данные, например

Bundle retrievedData = this.getIntent().getExtras();
if (retrievedData != null) {
   int zoomLevel = retrievedData.getInt(ZOOM_LEVEL_CONSTANT);
   mapView.getController.setZoom(zoomLevel);
}

Edit: Для динамического заполнения содержимого вкладки:

TabSpec tabSpec = tabHost.newTabSpec("Android X");
tabSpec.setContent(new TabContentFactory() { 
   public View createTabContent(String arg0) { 
       //return the view to add as content
       return theView; 
   }
});
...