android使用自定控件实现城市列表展示并且实现当前城市定位

本文详细介绍了如何在Android应用中创建一个自定义控件,用于展示城市列表,并结合百度地图API实现当前城市的选择和定位功能。通过自定义ListView,实现了列表的滑动效果和点击事件处理,同时讲解了如何获取并显示用户的位置信息。
摘要由CSDN通过智能技术生成
自定义控件,点击控件,展示城市列表,使用百度地图定位当前城市,并且展示当前城市
代码类
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 地图对象的操作方法与接口
    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) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    SDKInitializer.initialize(getApplicationContext());
    setContentView(R.layout.city_activity);

    //或得上一个页面传递过来的城市名称(这里指的是当前定位的城市名)
//  Intent it=getIntent();
//  final String tv=(String) it.getSerializableExtra("city");


     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); //打开gps
     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(title[letterCharList.get(firstVisibleItem)]);
                    tv01.setText("当前城市"+city);//设置值
                    lastFirstVisibleItem = firstVisibleItem;
                } else {    
                    if (lastFirstVisibleItem > firstVisibleItem) {
//                      tv01.setText(title[letterCharList
//                              .get(lastFirstVisibleItem) - 1]);
                        tv01.setText("当前城市"+city);//设置值
                    }
                }
            }
        });

        //点击item项,转换成要定位的城市
        mainList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

//       
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值