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();
}
}