顯示具有 google map 標籤的文章。 顯示所有文章
顯示具有 google map 標籤的文章。 顯示所有文章

2014年7月9日 星期三

Android google map 結合 spinner 下拉式選單

利用下拉式選單選定某個項目後,直接在google map上移到定點
1.activity_main.xml 在地圖下方加入下拉式選單




2.MainActivity.java 以基隆市、台北市85度c為例
private float coordinate[][][] = {
   { { 0, (float) 25.1288160, (float) 121.7404860 },
     { 0, (float) 25.1286310, (float) 121.7594120 },
     { 0, (float) 25.0972380, (float) 121.7122780 } },
   { { 1, (float) 25.0574640, (float) 121.5554840 },
     { 1, (float) 24.9836380, (float) 121.5673320 },
     { 1, (float) 25.0310780, (float) 121.5522090 } },
    }; //設定定點座標
private String[] type = new String[] { "基隆市", "台北市" }; //第一個選單
 private String[] locationName = new String[] { "85度c基隆孝一店", "85度c基隆東信店","85度c七堵明德店" }; //初始選單
 private String[][] type2 = new String[][] {
   { "85度c基隆孝一店", "85度c基隆東信店", "85度c七堵明德店" },
   { "85度c台北光復北店", "85度c木柵木新店", "85度c台北安和店" } };//第二個選單
 private Spinner sp1;// 第一個下拉選單
 private Spinner sp2;// 第二個下拉選單
 private Context context;
 ArrayAdapter adapter;
 ArrayAdapter adapter2;
@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  context = this;
  // 程式剛啟動時載入第一個下拉選單
  adapter = new ArrayAdapter(this,
    android.R.layout.simple_spinner_item, type);
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  sp1 = (Spinner) findViewById(R.id.type);
  sp1.setAdapter(adapter); //將adapter加入sp1選單
  sp1.setOnItemSelectedListener(selectListener); //第一個選單監聽動作

  // 程式剛啟動時載入第一個下拉選單,所以第二選單要載入第一個選單的子項目
  adapter2 = new ArrayAdapter(this,
    android.R.layout.simple_spinner_item, locationName);
  adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  sp2 = (Spinner) findViewById(R.id.type2);
  sp2.setAdapter(adapter2); //將adapter加入sp2選單
  sp2.setOnItemSelectedListener(selectListener2); //第二個選單監聽動作
 }

 // 第一個下拉選單監聽動作
 private OnItemSelectedListener selectListener = new OnItemSelectedListener() {
  public void onItemSelected(AdapterView parent, View v, int position,
    long id) {
   // 讀取第一個下拉選單是選擇第幾個
   int pos = sp1.getSelectedItemPosition();
   // 重新產生新的Adapter,用的是二維陣列type2[pos]
   adapter2 = new ArrayAdapter(context,
     android.R.layout.simple_spinner_item, type2[pos]);
   // 載入第二個下拉選單Spinner
   sp2.setAdapter(adapter2);

  }

  public void onNothingSelected(AdapterView arg0) {

  }

 };

 // 第二個下拉選單監聽動作
 private OnItemSelectedListener selectListener2 = new OnItemSelectedListener() {
  public void onItemSelected(AdapterView parent, View v, int position,
    long id) {
   setMapLocation(); //移動到選定項目位置的動作
  }

  public void onNothingSelected(AdapterView arg0) {

  }

 };

 public void setMapLocation() {
  try {
   int iSelect1 = sp1.getSelectedItemPosition(); //第一個下拉選單被選到的第幾個項目
   int iSelect2 = sp2.getSelectedItemPosition(); //第二個下拉選單被選到的第幾個項目
   double dLat = coordinate[iSelect1][iSelect2][1]; // 抓取座標,南北緯
   double dLon = coordinate[iSelect1][iSelect2][2]; // 抓取座標,東西經
   LatLng gg = new LatLng(dLat, dLon); //將座標位置輸入設定
   map.moveCamera(CameraUpdateFactory.newLatLng(gg)); //移動到定點
   map.animateCamera(CameraUpdateFactory.zoomTo(15)); //縮放
  } catch (NullPointerException e) {
   Log.i("myLocation", "NullPointException");
  }
 }
參考來源: http://jim690701.blogspot.tw/2012/07/androidspinner_15.html

2014年6月24日 星期二

Android google map addMarker setOnMarkerClickListener 標記後動作

使用google map標記功能addMarker後,需要增加動作可以使用OnMarkerClickListener和OnMarkerDragListene
例如:點取標記後,跳去其他頁面。
前置作業:有使用google map,有使用addMarker
1.MainActivity.java
public class MainActivity extends FragmentActivity implements OnMarkerClickListener{ //需引用OnMarkerClickListener
 private GoogleMap map;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 map = ((SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.map)).getMap();
  
  LatLng p1 = new LatLng(22.6297370, 120.3278820);
  if (map != null) {
   map.setOnMarkerClickListener(this); //點取Marker動作
   // google mark
   map.addMarker(new MarkerOptions()
     .position(p1)
     .title("多那之高雄中正門市")
     .snippet("咖啡.烘培"));
  }

 }

 /* 點選marker顯示 */
 @Override
   public boolean onMarkerClick(Marker marker) {
  /* 此處增加點取後想要的動作*/
  Toast.makeText(getApplicationContext(),"Marker Clicked: " + marker.getTitle(), Toast.LENGTH_LONG).show(); //顯示點取addMarker的標題
     return false;
   }

}

2014年6月3日 星期二

Android google map 空白畫面

當使用google map出現一片空白,只有出現左下角有google mark,還有+-縮放功能時 基本上有四種可能,常見的為key用錯
1.沒有使用android-support-v4.jar
google map建立方法:http://cheng-min-i-taiwan.blogspot.tw/2013/04/google-maps-android-api-v2-android.html
 
2.模擬器要選擇使用Google APIs,不是Android x.x. version。

3.一般建立google map方法的網頁會要求申請一個google map API key來使用,實際上使用用原本給的key【Key for browser apps (with referers) 】就好

4.要安裝google_play_services,選擇File > Import > Android > Existing Android Code Into Workspace 點next然後點Browse,google-play-services_lib放在你的android-sdks資料夾裡的/extras/google/google_play_services/libproject/google-play-services_lib

來源:http://stackoverflow.com/questions/14216205/google-map-android-api-v2-sample-code-not-working