編輯:關於Android編程
實現此例程之前要做的的步驟:
1、申請Baidu API_KEY;<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPiA8c3Ryb25nPjxlbT4yoaLPwtTYQmFpZHUgU0RLo6zS1LywQmFpZHUgQlMgU2FtcGxlo6zU2mxpYnPW0LW8yOtiYWlkdW1hcGFwaV92M181XzAuamFyus1sb2NTREtfNi4xMS5qYXLBvbj2sPw8L2VtPjwvc3Ryb25nPiA8c3Ryb25nPjxlbT4zoaLU2m1haW7Ev8K8z8LQwr2o0ru49mpuaUxpYnPOxLz+vNCjrLW8yOvE473i0bm6w7XEtcRCYWlkdSBzZGvW0HNvsPzW0LXEYXJtNjQtdjhhoaJhcm1lYWJpoaJhcm1lYWJpLXY3YaGieDg2oaJ4ODZfNjTV4ry4uPbOxLz+vNCjrMi7uvPU2kJhaWR1IEJT1tDV0rW9c2+/4mFybTY0LXY4YaGiYXJtZWFiaaGiYXJtZWFiaS12N2Ghom1pcHOhom1pcHM2NKGieDg2oaJ4ODZfNjSjrMjnufvE48/CtcTKx0JhaWR1IEJTIFNhbXBsZaOsv8nS1NaxvdPV0rj2yrLDtLmmxNy2vNPQtcRzYW1wbGWjrLDRy/y1xGxpYnPPwrXEy/nT0M7EvP6/vbG0tb3E47XEbGlic8S/wrzPwqOs1eLA77XEw7+49nNvsPy1xNf308O2vLK70rvR+aOstry1vL34yKW/ydLUyLexo83yzt7Su8qno6zSsr/J0tTU2mxpYnPOxLz+vNDPwtaxvdO1vMjryc/K9rXExMfQqc7EvP680Ly4uPbOxLz+vNChozwvZW0+PC9zdHJvbmc+PGJyIC8+DQo8c3Ryb25nPteio7rO0rXEam5pTGlic7D8tcS94bm5o7o8L3N0cm9uZz48YnIgLz4NCjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20151029/2015102908273251.png" title="\" /> 4、在AndroidManifest中添加權限:
5、申明你的API KEY
你還可以在Baidu地圖官網上找到他們的API照著他們的步驟好好做一遍,把所有預備工作做好,然後直接看下面的Demo
public class BaiduMapActivity extends BaseActivity implements View.OnClickListener {
private MapView mMapView;
private BaiduMap mBaiduMap;
private LocationClient mLocationClient = null;
public BDLocationListener mBDListener = new MyLocationListener();
private List bdMapClientList;
private double latitude;
private double longitude;
private boolean isFirstLocate = true;
private Button mButtonAdd;
private Button mButtonSub;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_baidu_map);
/**
* 縮放地圖的按鈕
*/
mButtonAdd = (Button) findViewById(R.id.button_add);
mButtonSub = (Button) findViewById(R.id.button_sub);
mButtonAdd.setOnClickListener(this);
mButtonSub.setOnClickListener(this);
mMapView = (MapView) findViewById(R.id.mapView_client_raise);
mMapView.showZoomControls(false);//讓百度地圖默認的地圖縮放控件不顯示
mBaiduMap = mMapView.getMap();
mBaiduMap.setMyLocationEnabled(true);//使能百度地圖的定位功能
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(mBDListener);//注冊地圖的監聽器
initLocation();
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
final String info = (String) marker.getExtraInfo().get(info);
InfoWindow infoWindow;
//動態生成一個Button對象,用戶在地圖中顯示InfoWindow
final Button textInfo = new Button(getApplicationContext());
textInfo.setBackgroundResource(R.drawable.locate_popup_state);
textInfo.setPadding(10, 10, 10, 10);
textInfo.setTextColor(Color.BLACK);
textInfo.setTextSize(12);
textInfo.setText(info);
//得到點擊的覆蓋物的經緯度
LatLng ll = marker.getPosition();
textInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(BaiduMapActivity.this, 你點擊了+info, Toast.LENGTH_SHORT).show();
}
});
//將marker所在的經緯度的信息轉化成屏幕上的坐標
Point p = mBaiduMap.getProjection().toScreenLocation(ll);
p.y -= 90;
LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);
//初始化infoWindow,最後那個參數表示顯示的位置相對於覆蓋物的豎直偏移量,這裡也可以傳入一個監聽器
infoWindow = new InfoWindow(textInfo, llInfo, 0);
mBaiduMap.showInfoWindow(infoWindow);//顯示此infoWindow
//讓地圖以備點擊的覆蓋物為中心
MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.setMapStatus(status);
return true;
}
});
//開始定位
mLocationClient.start();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_add:
//放大地圖
mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());
break;
case R.id.button_sub:
//縮小地圖
mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());
break;
default:
break;
}
}
/**
* 自定義一個百度地圖的定位監聽器,可監聽定位類型,位置經緯度變化等一系列狀態
*/
private class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
latitude = bdLocation.getLatitude();//得到緯度
longitude = bdLocation.getLongitude();//得到經度
boolean isLocateFailed = false;//定位是否成功
if (isFirstLocate) {
if (bdLocation.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位結果
ToastUtils.showToast(getApplicationContext(), GPS定位);
} else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {// 網絡定位結果
ToastUtils.showToast(getApplicationContext(), 網絡定位);
} else if (bdLocation.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結果
ToastUtils.showToast(getApplicationContext(), 離線定位);
} else if (bdLocation.getLocType() == BDLocation.TypeServerError
|| bdLocation.getLocType() == BDLocation.TypeNetWorkException
|| bdLocation.getLocType() == BDLocation.TypeCriteriaException) {
isLocateFailed = true;
}
/**
* 如果定位不成功,顯示定位失敗的dialog
*/
if (isLocateFailed) {
simpleDialog();
}
initMapDataList();
addOverlay();
isFirstLocate = false;
}
}
}
/**
* 添加覆蓋物的方法
*/
private void addOverlay() {
Marker marker = null;
LatLng point = null;
MarkerOptions option = null;
BitmapDescriptor bitmap =BitmapDescriptorFactory.fromResource(R.mipmap.customer_location);;
for (BDMapData data : bdMapClientList) {
point = new LatLng(data.getLatitude(), data.getLongitude());
option = new MarkerOptions().position(point).icon(bitmap);
marker = (Marker) mBaiduMap.addOverlay(option);
//Bundle用於通信
Bundle bundle = new Bundle();
bundle.putSerializable(info, data.getName()+
+緯度:+data.getLatitude()+ 經度:+data.getLongitude());
marker.setExtraInfo(bundle);//將bundle值傳入marker中,給baiduMap設置監聽時可以得到它
}
//將地圖移動到最後一個標志點
MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(point);
mBaiduMap.setMapStatus(status);
}
/**
* BaiduAPI上的例程,初始化定位
*/
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
option.setCoorType(bd09ll);//可選,默認gcj02,設置返回的定位結果坐標系
int span = 1000;
option.setScanSpan(span);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大於等於1000ms才是有效的
option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要
option.setOpenGps(true);//可選,默認false,設置是否使用gps
option.setLocationNotify(true);//可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果
option.setIsNeedLocationDescribe(true);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe裡得到,結果類似於“在北京天安門附近”
option.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList裡得到
option.setIgnoreKillProcess(false);//可選,默認false,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認殺死
option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集
option.setEnableSimulateGps(false);//可選,默認false,設置是否需要過濾gps仿真結果,默認需要
mLocationClient.setLocOption(option);
}
//初始化每個覆蓋物對應的信息
private void initMapDataList() {
bdMapClientList = new ArrayList<>();
//讓所有覆蓋物的經緯度與你自己的經緯度相近,以便打開地圖就能看到那些覆蓋物
bdMapClientList.add(new BDMapData(中興創維, latitude - 0.0656, longitude - 0.00354));
bdMapClientList.add(new BDMapData(領卓科技, latitude + 0.024, longitude - 0.0105));
bdMapClientList.add(new BDMapData(藍翔駕校, latitude - 0.00052, longitude - 0.01086));
bdMapClientList.add(new BDMapData(優衣庫折扣店, latitude + 0.0124, longitude + 0.00184));
}
/**
* 定位失敗時顯示的dialog的初始化方法
*/
public void simpleDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(BaiduMapActivity.this);
builder.setMessage(當前網絡不可用,請檢查網絡設置)
.setNeutralButton(確定, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(true);
dialog.show();
}
}
public class BDMapData {
private String name;
private double latitude;//緯度
private double longitude;//經度
public BDMapData(String name, double latitude, double longitude) {
this.name = name;
this.latitude = latitude;
this.longitude = longitude;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
item_bg.xml
add_state.xml
sub_state.xml:
locate_popup.xml
white:#ffffff
grey:#d0d0d0
customer_location.png:
add_group.png:
add_group_press.png:
btn_reduction_group.png:
btn_reduction_group_press.png:
btn_back_normal.png:
一、概述最近需要用進度條,秉著不重復造輪子的原則,上github上搜索了一番,看了幾個覺得比較好看的ProgressBar,比如:daimajia的等。簡單看了下代碼,基
第一:了解三個類Canvas,在英語中,這個單詞的意思是帆布。在Android中,則把Canvas當做畫布,只要我們借助設置好的畫筆(Paint類)就可以在畫布上繪制我們
0和1是計算機的基礎,數理邏輯中0和1代表兩種狀態,真與假.0和1看似簡單,其實變化無窮. 今天我就來聊聊android控件中擁有著0和1這種特性的魔力控件checkbo
好久沒寫博客了,今天沒事怒更一記。 如標題今天我們來模仿一下搜狐新聞,先上個效果圖. 1,接下來我們就來分析一下這個效果 下面的內容應該是用