import java.util.ArrayList;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptor;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private MapView mapView;
private AMap aMap;
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mapView = (MapView) findViewById(R.id.map);
//必须回调MapView的onCreate()方法
mapView.onCreate(savedInstanceState);
init();
RadioButton rb = (RadioButton) findViewById (R.id.gps);
//为gps设置监听器
rb.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
//如果该单选按钮已经被选中
if(isChecked){
//通过监听器监听gps提供的定位信息的改变
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 300, 8, new LocationListener()
{
@Override
public void onLocationChanged(Location loc){
//使用gps的定位信息来更新定位
updatePosition(loc);
}
@Override
public void onStatusChanged(String provider, int status,Bundle extras){}
@Override
public void onProviderEnabled(String provider){
//使用gps提供的定位信息来更新位置
updatePosition(locationManager.getLastKnownLocation(provider));
}
public void onProviderDisabled(String provider){}
}
);//locationManager.requestLocationUpdates
}
}
}
);//setOnCheckedChangeListener
Button bn = (Button) findViewById(R.id.loc);
final TextView latTv = (TextView) findViewById(R.id.lat);
final TextView lngTv = (TextView) findViewById(R.id.lng);
bn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//获取用户输入的经度、纬度值
String lng = lngTv.getEditableText().toString().trim();
String lat = latTv.getEditableText().toString().trim();
if(lng.equals("")||lat.equals("")){
Toast.makeText(MainActivity.this, "请输入有效的经度、纬度!", Toast.LENGTH_SHORT).show();//
}
else
{
//设置根据用户输入的地址定位
((RadioButton)findViewById(R.id.manual)).setChecked(true);
double dLng = Double.parseDouble(lng);
double dLat = Double.parseDouble(lat);
//将用户输入的经度、纬度封装成LatLng
LatLng pos = new LatLng(dLat,dLng);
//创建一个设置纬度的cameraupdate
CameraUpdate cu = CameraUpdateFactory.changeLatLng(pos);//
//更新地图的显示区域
aMap.moveCamera(cu);//
//创建markerOptions对象
MarkerOptions markerOptions = new MarkerOptions();
//设置markerOptions的添加位置
markerOptions.position(pos);
//设置markerOptions的标题
markerOptions.title("疯狂软件教育中心");
//设置markerOptions的摘录信息
markerOptions.snippet("专业的java、ios培训中心");
//设置markerOptions的图标
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
markerOptions.draggable(true);
//添加markerOptions
Marker marker = aMap.addMarker(markerOptions);
marker.showInfoWindow();//设置默认显示信息窗
//创建markerOptions,并设置它的各种属性
MarkerOptions markerOptionsl =new MarkerOptions();
markerOptionsl.position(new LatLng(dLat + 0.001,dLng))
//设置标题
.title("疯狂软件教育中心学生食堂")
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA))
.draggable(true);
//使用集合封装多个图标,这样可为MarkerOptions设置多个图标
ArrayList<BitmapDescriptor>giflist = new ArrayList<>();
giflist.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
giflist.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
giflist.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
//再创建一个MarkerOptions,并设置它的各种属性
MarkerOptions markerOptions2 = new MarkerOptions().position(new LatLng(dLat - 0.001,dLng))
//为MarkerOptions设置多个图标
.icons(giflist)
.title("疯狂软件教育中心学生宿舍")
.draggable(true)
//设置图标的切换频率
.period(10);
//使用ArrayList封装多个MarkerOptions,即可一次添加多个Marker
ArrayList<MarkerOptions>optionList = new ArrayList<>();
optionList.add(markerOptionsl);
optionList.add(markerOptions2);
//批量添加多个marker
aMap.addMarkers(optionList,true);
}
}
});
}
private void updatePosition(Location location){
LatLng pos = new LatLng(location.getLatitude(),location.getLongitude());
//创建一个设置经纬度的CameraUpdate
CameraUpdate cu = CameraUpdateFactory.changeLatLng(pos);
//更新地图显示的区域
aMap.moveCamera(cu);
//清除所有Marker等覆盖物
aMap.clear();
//创建CameraUpdate对象
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(pos);
//设置CameraUpdate使用自定义图标
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher));
markerOptions.draggable(true);
//添加CameraUpdate
Marker marker = aMap.addMarker(markerOptions);
}
//初始化AMap对象
private void init(){
if(aMap == null){
aMap = mapView.getMap();
//创建一个设置放大级别的CameraUpdate
CameraUpdate cu = CameraUpdateFactory.zoomTo(15);
//设置地图的默认放大级别
aMap.moveCamera(cu);
//创建一个更改地图倾斜度的CameraUpdate
CameraUpdate titleUpdate = CameraUpdateFactory.changeTilt(30);
//改变地图的倾斜度
aMap.moveCamera(titleUpdate);
}
}
@Override
protected void onResume(){
super.onResume();
//必须回调MapView的onResume()方法
mapView.onResume();
}
@Override
protected void onPause(){
super.onPause();
//必须回调MapView的onPause()方法
mapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
//必须回调MapView的onSaveInstanceState()方法
mapView.onSaveInstanceState(outState);
}
@Override
protected void onDestroy(){
super.onDestroy();
//必须回调MapView的onDestroy()方法
mapView.onDestroy();
}
}
<?xml version="1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<TextView
android:text="@string/txtlng"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- 定义输入经度值得文本框 -->
<EditText
android:id="@+id/lng"
android:text="@string/lng"
android:inputType="numberDecimal"
android:layout_width="85dp"
android:layout_height="wrap_content"/>
<TextView
android:text="@string/txtLat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"/>
<!-- 定义输入纬度值的文本框 -->
<EditText
android:id="@+id/lat"
android:text="@string/lat"
android:inputType="numberDecimal"
android:layout_width="85dp"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/loc"
android:text="@string/loc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<!-- 定义选择定位方式的单选扭组 -->
<RadioGroup
android:id="@+id/rg"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<RadioButton
android:text="@string/manul"
android:id="@+id/manual"
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton
android:text="@string/gps"
android:id="@+id/gps"
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RadioGroup>
</LinearLayout>
<!-- 使用高德地图提供的MapView -->
<com.amap.api.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
运行时工程崩溃。。。求大神指点,文档里已经不显示错误了
1 个解决方案
#1
崩溃,自己不知道看logcat日志啊,有错误那里写的都很清楚
#1
崩溃,自己不知道看logcat日志啊,有错误那里写的都很清楚