package com.jiuqi.njt.ui; import java.util.Observable; import java.util.Observer; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; import android.content.Intent; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import com.amap.api.maps.AMap; import com.amap.api.maps.AMap.CancelableCallback; import com.amap.api.maps.AMap.OnMarkerClickListener; import com.amap.api.maps.CameraUpdate; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.SupportMapFragment; import com.amap.api.maps.model.BitmapDescriptorFactory; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.baidu.location.BDLocation; import com.jiuqi.njt.R; import com.jiuqi.njt.data.MyApp; import com.jiuqi.njt.data.OptsharepreInterface; import com.jiuqi.njt.util.AMapUtil; import com.jiuqi.njt.util.Constants; import com.jiuqi.njt.util.UIUtil; import com.jiuqi.njt.widget.DialogWithList; import com.jqyd.android.module.lbs.LocationClient; import com.jqyd.android.module.lbs.Interface.ILocationListener; import com.jqyd.android.module.lbs.bean.LocationInfo; /** * <p>周边(以前的MapActivity)</p> * * <p>Copyright: 版权所有 (c)<br> * Company: 久其</p> * * @author liyue * @version 2013-8-16 */ public class PoiSearchActivity extends BaseActivity implements Observer, OnMarkerClickListener{ private Context context = this; private AMap aMap; private Marker defaultMarker; private EditText etKeys; private double latitude = 0; private double longitude = 0; private boolean isLocated = false; private ImageButton btnLocate; private boolean isClicked = false; private OptsharepreInterface sharePre; private final String[] strsPoiTypes = Constants.strPoiTypes; // private Dialog dialog = null; private DialogWithList.Builder dialog = null; private static int zoomLevel = 10;// 放大倍数 private MyApp application; private com.amap.api.maps.UiSettings mUiSettings; private ImageView zoomin_bt; private ImageView zoomout_bt; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); doinit(); } private void doinit(){ initParam(); initWidgets(); initListener(); initUI(); } private void initParam(){ sharePre = new OptsharepreInterface(this); application = (MyApp) getApplicationContext(); } private void initWidgets(){ setContentView(R.layout.poi_search_activity); // dialog = // new AlertDialog.Builder(this).setTitle("搜索周边") // .setItems(strsPoiTypes, new DialogInterface.OnClickListener(){ // // public void onClick(DialogInterface dialog, int which){ // // Intent intent = new Intent(); // intent.setClass(PoiSearchActivity.this, PoiSearchResultActivity.class); // intent.putExtra(Constants.PARAM_ID, which); // intent.putExtra(Constants.PARAM_LATITUDE, latitude); // intent.putExtra(Constants.PARAM_LONGITUDE, longitude); // startActivity(intent); // } // }).setNegativeButton(Constants.CANCEL_TEXT, new DialogInterface.OnClickListener(){ // // public void onClick(DialogInterface dialog, int which){ // // } // }).create(); dialog = new DialogWithList.Builder(this); dialog.setTitle("搜索周边"); dialog.setPositiveButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.dismiss(); } }); dialog.setItems(strsPoiTypes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setClass(PoiSearchActivity.this, PoiSearchResultActivity.class); intent.putExtra(Constants.PARAM_ID, which); intent.putExtra(Constants.PARAM_LATITUDE, latitude); intent.putExtra(Constants.PARAM_LONGITUDE, longitude); startActivity(intent); dialog.dismiss(); } }); if(aMap == null){ aMap = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); if(AMapUtil.checkReady(this, aMap)){ setUpMap(); } } btnLocate = (ImageButton)findViewById(R.id.btnLocate); etKeys = (EditText)findViewById(R.id.etKeys); zoomin_bt = (ImageView) findViewById(R.id.zoomin_bt); zoomout_bt = (ImageView) findViewById(R.id.zoomout_bt); //隐藏地图自带的缩放按钮 mUiSettings = aMap.getUiSettings(); mUiSettings.setZoomControlsEnabled(false); etKeys.setHint("机手/合作社/加油站/维修点"); } private void initListener(){ dialog.setOnDismissListener(new OnDismissListener(){ @Override public void onDismiss(DialogInterface dialog){ isClicked = false; } }); btnLocate.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ if(defaultMarker!=null){ defaultMarker.remove(); } setUpBaiduLocation(); } }); etKeys.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event){ switch(event.getAction()){ case MotionEvent.ACTION_UP: // 只许点一次 if(!isClicked){ doEtKeysClick(); } break; } return true; } }); zoomin_bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub aMap.animateCamera(CameraUpdateFactory.zoomIn(),1000, null); } }); zoomout_bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub aMap.animateCamera(CameraUpdateFactory.zoomOut(),1000, null); } }); } private void initUI(){ // 隐藏软键盘 InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(etKeys.getWindowToken(), 0); // longitude = UIUtil.tryToDouble(sharepre.getPres(Constants.PREFERENCE_KEY_LONGITUDE)); // latitude = UIUtil.tryToDouble(sharepre.getPres(Constants.PREFERENCE_KEY_LATITUDE)); if(!isLocated){ // 开启定位,自动异步 setUpBaiduLocation(); } } private void setUpBaiduLocation(){ LocationClient client = new LocationClient(context); client.request(new ILocationListener() { @Override public void onReceiveLocInfo(int locType, LocationInfo loc) { isLocated =true; application.setProvince(loc.getProvince()); application.setCity(loc.getCity()); application.setLat(loc.getLat()); application.setLon(loc.getLon()); latitude = loc.getLat(); longitude = loc.getLon(); drawMarker(); } }); } private void setUpMap(){ aMap.getUiSettings().setZoomControlsEnabled(true);// 设置系统默认缩放按钮可见 aMap.getUiSettings().setMyLocationButtonEnabled(false); // 是否显示定位按钮 aMap.setMyLocationEnabled(false); // 是否显示定位层 aMap.setOnMarkerClickListener(this);// 对marker添加点击监听器 } protected void doEtKeysClick(){ isClicked = true; if(!isLocated){ UIUtil.showMsg(this, "未找到位置信息,您可以重新定位,也可以按默认地点[郑州]进行周边查询"); latitude = Constants.ZHENGZHOU.getLatitude(); longitude = Constants.ZHENGZHOU.getLongitude(); } dialog.create().show(); } // Observer /** * 接收百度定位类传来的参数 */ @Override public void update(Observable observable, Object data){ BDLocation loc = (BDLocation)data; latitude = loc.getLatitude(); longitude = loc.getLongitude(); application.setProvince(loc.getProvince()); sharePre.putPres(Constants.PREFERENCE_KEY_LATITUDE, String.valueOf(latitude)); sharePre.putPres(Constants.PREFERENCE_KEY_LONGITUDE, String.valueOf(longitude)); UIUtil.showMsg(this, "定位成功"); } private void drawMarker(){ // 对地图添加一个marker LatLng point = new LatLng(latitude, longitude); defaultMarker = aMap.addMarker(new MarkerOptions().position(point).title("您的位置") .snippet("您的位置").icon(BitmapDescriptorFactory.fromResource(R.drawable.position_loc_unpress)) // .icon(BitmapDescriptorFactory.fromBitmap(getViewBitmap(getView("目的地",poi_position_pressed // "先长按标记,再拖到指定的位置")))) .draggable(false)); updateView(point); defaultMarker.showInfoWindow(); } // 切换视图 private void updateView(LatLng poi){ CameraPosition camerapoint = new CameraPosition.Builder().target(poi).zoom(zoomLevel).build(); changeCamera(CameraUpdateFactory.newCameraPosition(camerapoint), null); } /** * 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区 * */ private void changeCamera(CameraUpdate update, CancelableCallback callback) { aMap.moveCamera(update); } // OnMarkerClickListener @Override public boolean onMarkerClick(Marker marker){ if(marker.equals(defaultMarker)){ // UIUtil.showMsg(this, marker.getSnippet()); // 只许点一次 if(!isClicked){ doEtKeysClick(); } } return true; } @Override protected void onResume(){ super.onResume(); } @Override protected void onPause(){ super.onPause(); } @Override protected void onDestroy(){ super.onDestroy(); } }