////////////////////2016/04/17//////////////////////////
///////////////////by xbw/////////////////////////////////
//////////////////环境 eclipse api 22////////////
先上一下效果图
话不多少,贴一下fragment的代码,高德地图的jar包导入就不细说了,官方很详细了,
ContactFragment.java
package com.example.matrix.fragment; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; import com.amap.api.maps.AMap; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.example.Config.Config; import com.example.matrix.GPSNaviActivity; import com.example.matrix.R; import com.example.matrix.menu.menu_1; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.RadioGroup; import android.widget.TextView; public class ContactFragment extends Fragment implements LocationSource, AMapLocationListener { private AMap aMap; private MapView mapView; private OnLocationChangedListener mListener; private AMapLocationClient mlocationClient; private AMapLocationClientOption mLocationOption; private RadioGroup mGPSModeGroup; private TextView mLocationErrText; private View mapLayout; private ImageButton imgbtn; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mapLayout == null) { mapLayout = inflater.inflate(R.layout.locationmodesource_activity, null); mapView = (MapView) mapLayout.findViewById(R.id.map); mapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mapView.getMap(); // init(); setUpMap(); mLocationErrText = (TextView) mapLayout .findViewById(R.id.location_errInfo_text); imgbtn = (ImageButton) mapLayout .findViewById(R.id.imageButton1); } } else { if (mapLayout.getParent() != null) { ((ViewGroup) mapLayout.getParent()).removeView(mapLayout); } } return mapLayout; } public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); init(); } private void init() { mLocationErrText.setVisibility(View.GONE); imgbtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 Intent mIntent = new Intent(); mIntent.setClass(getActivity(), GPSNaviActivity.class); getActivity().startActivity(mIntent); } }); // imgbtn.setVisibility(View.GONE); } private void setUpMap() { aMap.setLocationSource(this);// 设置定位监听 aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false // 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种 aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); } @Override public void onLocationChanged(AMapLocation amapLocation) { // TODO 自动生成的方法存根 Log.v("@@@@@@@@@@@@@@@", amapLocation.getLongitude() + ""); Log.v("@@@@@@@@@@@@@@@", amapLocation.getLatitude() + ""); Config.locs = amapLocation; if (mListener != null && amapLocation != null) { if (amapLocation != null && amapLocation.getErrorCode() == 0) { mLocationErrText.setVisibility(View.GONE); mListener.onLocationChanged(amapLocation);// 显示系统小蓝点 imgbtn.setVisibility(View.VISIBLE); } else { String errText = "定位失败," + amapLocation.getErrorCode() + ": " + amapLocation.getErrorInfo(); Log.e("AmapErr", errText); mLocationErrText.setVisibility(View.VISIBLE); mLocationErrText.setText(errText); } } } @Override public void activate(OnLocationChangedListener listener) { // TODO 自动生成的方法存根 mListener = listener; if (mlocationClient == null) { mlocationClient = new AMapLocationClient(getActivity()); mLocationOption = new AMapLocationClientOption(); // 设置定位监听 mlocationClient.setLocationListener(this); // 设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); // 设置定位参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation(); } } @Override public void deactivate() { // TODO 自动生成的方法存根 mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } /** * 方法必须重写 */ @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); if (null != mlocationClient) { mlocationClient.onDestroy(); } } /** * 方法必须重写 */ @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override public void onPause() { super.onPause(); mapView.onPause(); deactivate(); } /** * 方法必须重写 */ @Override public void onResume() { super.onResume(); mapView.onResume(); } }
locationmodesource_activity.xml文件
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" > </com.amap.api.maps.MapView> <TextView android:id="@+id/location_errInfo_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom|left" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:background="@color/red" android:textColor="@color/darkgrey" android:text="TextView" android:visibility="gone"/> <ImageButton android:id="@+id/imageButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_3" /> </FrameLayout>
错误报告:The specified child already has a parent. You must call removeView() on the child's parent first.
if (mapLayout == null) { mapLayout = inflater.inflate(R.layout.locationmodesource_activity, null); mapView = (MapView) mapLayout.findViewById(R.id.map); mapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mapView.getMap(); // init(); setUpMap(); mLocationErrText = (TextView) mapLayout .findViewById(R.id.location_errInfo_text); imgbtn = (ImageButton) mapLayout .findViewById(R.id.imageButton1); } } else { if (mapLayout.getParent() != null) { ((ViewGroup) mapLayout.getParent()).removeView(mapLayout); } } return mapLayout;
mLocationErrText = (TextView) mapLayout .findViewById(R.id.location_errInfo_text); imgbtn = (ImageButton) mapLayout .findViewById(R.id.imageButton1);
这句放错了位置,导致按钮监听事件失效,