這裡展示了在Android中使用Google Map的幾個簡單應用:
貼圖標 (自定內容不含外框、自定樣式含內容和圖標)
繪置線
繪置面(區域)
直接看程式碼:
MainActivity.java :
package com.example.gjun.googlemapmarkerpractice;
import android.graphics.Color;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polygon;
import com.google.android.gms.maps.model.PolygonOptions;
import com.google.android.gms.maps.model.PolylineOptions;
public class MainActivity extends ActionBarActivity {
private GoogleMap map;
private LinearLayout info_panel;
private TextView info;
private Marker myMarker1;
private Marker myMarker2;
//設定地圖中心點
private static final LatLng mapCenter = new LatLng(25.051234, 121.538315);
// 繪製線條用的座標
private static final LatLng station01 = new LatLng(25.04657, 121.51763);
private static final LatLng station02 = new LatLng(25.044937, 121.523037);
private static final LatLng station03 = new LatLng(25.042293, 121.532907);
private static final LatLng station04 = new LatLng(25.051702, 121.532907);
private static final LatLng station05 = new LatLng(25.05971, 121.533251);
// 繪製區塊用的座標
private static final LatLng station06 = new LatLng(25.062354, 121.541061);
private static final LatLng station07 = new LatLng(25.041671, 121.5378);
private static final LatLng station08 = new LatLng(25.04136, 121.557713);
private static final LatLng station09 = new LatLng(25.063054, 121.552048);
private Marker marker01, marker02, marker03, marker04, marker05;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
///取得GoogleMap物件
if (map == null) {
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
}
//移動到地圖中心
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(mapCenter, 13);
map.moveCamera(cameraUpdate);
//--------------------------繪制圖標--------------------------
MarkerOptions markerOptions1 = new MarkerOptions();
markerOptions1.position(station01)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.train));
myMarker1 = map.addMarker(markerOptions1);
MarkerOptions markerOptions2 = new MarkerOptions();
markerOptions2.position(station05)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.taipei_101_marker));
myMarker2 = map.addMarker(markerOptions2);
myMarker2.setDraggable(true);
//設置圖標的氣泡顯示訊息樣式
map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
//自訂樣式,連外框
public View getInfoWindow(Marker marker) {
if (marker.equals(myMarker2)) {
//從指定的畫面layout檔建立訊息視窗畫面物件
View view = getLayoutInflater().inflate(R.layout.info_window, null);
//說定圖示、標題和說明
ImageView badge = (ImageView) view.findViewById(R.id.badge);
TextView title = (TextView) view.findViewById(R.id.title);
TextView snippet = (TextView) view.findViewById(R.id.snippet);
badge.setImageResource(R.drawable.roc_flag);
title.setText("This is title!");
snippet.setText("This is snippet");
///傳回自訂的訊息視窗
return view;
}
return null;
}
//自訂樣式,不連外框,只有內容
@Override
public View getInfoContents(Marker marker) {
if (marker.equals(myMarker1)) {
//從指定的畫面layout檔建立訊息視窗畫面物件
View view = getLayoutInflater().inflate(R.layout.info_content, null);
//說定圖示、標題和說明
ImageView badge = (ImageView) view.findViewById(R.id.badge);
TextView title = (TextView) view.findViewById(R.id.title);
badge.setImageResource(R.drawable.train);
title.setText("This is title!");
///傳回自訂的訊息內容
return view;
}
return null;
}
});
//--------------------------------------------------------------------
// --------------------------繪製點連成的線--------------------
PolylineOptions polylineOptions = new PolylineOptions();
polylineOptions.add(station01, station02, station03, station04, station05);
polylineOptions.width(10);
polylineOptions.color(Color.BLUE);
map.addPolyline(polylineOptions);
//--------------------------------------------------------------------
//--------------------------繪製點連成的面--------------------
PolygonOptions polygonOptions = new PolygonOptions();
polygonOptions.add(station06, station07, station08, station09);
Polygon polygon = map.addPolygon(polygonOptions);
polygon.setStrokeWidth(5);
polygon.setStrokeColor(Color.rgb(102, 153, 0));
polygon.setFillColor(Color.argb(200, 255, 255, 0));
polygon.setZIndex(1);
//--------------------------------------------------------------------
//--------------------------繪制圓形--------------------------
CircleOptions circleOptions = new CircleOptions();
circleOptions.center(mapCenter)
.radius(2500)
.zIndex(2)
.strokeWidth(0)
.strokeColor(Color.argb(200, 255, 0, 0))
.fillColor(Color.argb(50, 255, 0, 0));
map.addCircle(circleOptions);
//--------------------------------------------------------------------
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
info_content.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- 圖示 -->
<ImageView
android:id="@+id/badge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:adjustViewBounds="true"
android:src="@drawable/train" >
</ImageView>
<!-- 標題 -->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#ffff0000"
android:textSize="14dp"
android:textStyle="bold" />
</LinearLayout>
info_window.xml :
<?xml version="1.0" encoding="utf-8"?>
<!-- 設定背景為自己設計的外框圖形info_bubble -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/info_bubble"
android:orientation="horizontal" >
<!-- 圖示 -->
<ImageView
android:id="@+id/badge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:adjustViewBounds="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- 標題 -->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#ff000000"
android:textSize="14dp"
android:textStyle="bold" />
<!-- 說明 -->
<TextView
android:id="@+id/snippet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#ff7f7f7f"
android:textSize="14dp" />
</LinearLayout>
</LinearLayout>
build.gradle(Module.app):
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.example.gjun.googlemapmarkerpractice"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.google.android.gms:play-services:+'
}
AndroidManifest.xml :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gjun.googlemapmarkerpractice" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyCBRZamFCDSFNgkk4CKbUBoePEgYvf87FE"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
成品:
VIDEO
源碼下載:
GoogleMapMarkerPractice.7z