2010-01-08 65 views
2

我需要在選項卡上有一個mapview。 attached example顯示如果使用意圖如何做到這一點。 現在我想更改mapview(s)的縮放級別。 我如何做到這一點,雖然我使用的意圖(或有完全 不同的解決方案)?Android MapView + Tab示例

活動代碼:

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> 

THX

+0

理論上,您現在可以通過您在意圖上添加的數據來設置縮放級別,如我在後面的文章中所述。應該管用。 – Juri 2010-01-08 12:31:43

回答

1

變焦應該可以要麼通過激活的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); 
} 

編輯: 動態填充選項卡內容:

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

嘗試使用MapController

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

又見Using Google Maps in Android

UPDATE
創建相同的佈局的幾個實例,存在這樣的問題通過ID來獲得MapView類的需要實例。你能爲每個標籤使用不同的佈局嗎?或動態創建它們?

1

@ juri: 意圖還可以接收onCreate()之外的數據嗎? (例如,在運行時動態設置縮放級別,而不僅僅是在創建目標時)

+0

你應該添加這樣的語句作爲我的文章的評論。這是在Stackoverflow上進行交互的方式。我更新了我的原始帖子,向您展示瞭如何在不使用Intents的情況下動態創建標籤的內容。通過這種方式,您應該能夠創建對MapView對象的引用,然後允許您在運行時通過適當的調用進行縮放等操作。 – Juri 2010-01-08 18:53:53