自定义控件,点击控件,展示城市列表,使用百度地图定位当前城市,并且展示当前城市
代码类
package com.example.test0504;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.model.LatLng;
import com.example.adapter.MyAdapter;
import com.example.test0504.MainActivity.MyLocationListenner;
/**
*
* 定义城市页面
* @author 浅议爱
*
*/
public class CityActivity extends Activity implements
MySideBar.OnTouchingLetterChangedListener {
MapView mMapView = null;
LocationClient mLocClient;
private LocationMode mCurrentMode;
BitmapDescriptor mCurrentMarker;
BaiduMap mBaiduMap;
boolean isFirstLoc = true;
public MyLocationListenner myListener = new MyLocationListenner();
private String city;
private ListView mainList;
/** 数据源 */
private List<String> data;
/** 字母位置 */
private List<Integer> letterPositionList;
/** 字母Char */
private List<Integer> letterCharList;
private MySideBar myView;
private TextView tv01;
private String[] title = {
"GPS定位城市", "热门城市", "A", "B", "C", "D", "E", "F", "G", "H",
"I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y", "Z" };
private int lastFirstVisibleItem;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.city_activity);
mMapView=(MapView) findViewById(R.id.bmapView);
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
mBaiduMap=mMapView.getMap();
mBaiduMap.setMyLocationEnabled(true);
mCurrentMode = LocationMode.NORMAL;
mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker));
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setCoorType("bd09ll");
option.setScanSpan(1000);
option.setIsNeedAddress(true);
option.setIsNeedLocationDescribe(true);
mLocClient.setLocOption(option);
mLocClient.start();
mainList = (ListView) findViewById(R.id.mainlist);
myView = (MySideBar) findViewById(R.id.myview);
tv01 = (TextView) findViewById(R.id.main_tv01);
myView.setOnTouchingLetterChangedListener(this);
data = new ArrayList<String>();
letterCharList = new ArrayList<Integer>();
letterPositionList = new ArrayList<Integer>();
int index = 0, position = 0;
letterCharList.add(index);
for (int i = 0; i < ary.length; i++) {
for (int j = 0; j < ary[i].length; j++) {
if (i == 0 && j == 0) {
index++;
letterPositionList.add(position);
} else if (j == 0) {
letterCharList.add(index);
letterPositionList.add(position);
index++;
} else {
letterCharList.add(-1);
}
position++;
data.add(ary[i][j]);
}
}
MyAdapter adapter = new MyAdapter(this, data, letterCharList, title);
mainList.setAdapter(adapter);
mainList.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (letterCharList.get(firstVisibleItem) >= 0) {
tv01.setText("当前城市"+city);
lastFirstVisibleItem = firstVisibleItem;
} else {
if (lastFirstVisibleItem > firstVisibleItem) {
tv01.setText("当前城市"+city);
}
}
}
});
mainList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {