popupwindow百度地图API普通地图与卫星地图切换

我用的百度地图v4.0.0
要通过PopupWindow实现普通地图与卫星地图切换
部分代码借鉴自 http://www.cnblogs.com/mengdd/p/3569127.html 感谢原作者

首先写个布局文件 layers_item_layout.xml




    

    


popupwindow百度地图API普通地图与卫星地图切换_第1张图片
布局文件

在地图主界面添加一个类似开关的图标


popupwindow百度地图API普通地图与卫星地图切换_第2张图片
按钮

接下来就是activity了,主要代码如下:

@Override
    protected void onCreate(Bundle savedInstanceState) {
    
        IvMapMode = (ImageView) findViewById(R.id.iv_map_mode);
        setMapMode();
    }
    
    private void setMapMode() {
        IvMapMode.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                IvMapMode.setImageResource(R.drawable.map_mode_clicked);
                showPopupWindow(v);

            }
        });


    protected void showPopupWindow(View v) {
        // TODO Auto-generated method stub
        // 一个自定义的布局,作为显示的内容
        View contentView = LayoutInflater.from(mContext).inflate(R.layout.layers_item_layout, null);
        IvNormalMap = (ImageView) contentView.findViewById(R.id.normalmap);
        IvWeixingMap = (ImageView) contentView.findViewById(R.id.weixingmap);

        IvNormalMap.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                IvNormalMap.setImageResource(R.drawable.search_biaozhun_selected);
                IvWeixingMap.setImageResource(R.drawable.map_weixing);
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
                popupWindow.dismiss();
            }
        });

        IvWeixingMap.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                IvNormalMap.setImageResource(R.drawable.search_biaozhun);
                IvWeixingMap.setImageResource(R.drawable.map_weixing_selected);
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
                popupWindow.dismiss();

            }
        });

        popupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);

        popupWindow.setTouchable(true);

        popupWindow.setTouchInterceptor(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                IvMapMode.setImageResource(R.drawable.map_mode);

                return false;
                // 这里如果返回true的话,touch事件将被拦截
                // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
            }
        });

        // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
        // 我觉得这里是API的一个bug
        popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.search));
        WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        int xpos = manager.getDefaultDisplay().getWidth() / 2 - popupWindow.getWidth() / 2;
        // xoff,yoff基于anchor的左下角进行偏移。
        popupWindow.showAsDropDown(v, 0, 0);

    }

这样就实现了点击主界面小按钮,弹出popupwindow的效果,按钮本身会变色
卫星图和普通图也会变色,我是通过写了两个selector实现的,后来发现不太合理,这种情况不应该只是点击变色,而是点击后一直变色。但是我也把代码贴在这里吧,仅供参考

normal_map_mode.xml



    
    



weixing_map_mode.xml



    
    


selector文件要放到drawable目录里才能用,放到其他目录是无效的,就像.9图一样。

最后实现的效果是这样的,不知道为啥上下间距这么大,我设置的高度都是包裹内容,有大神解释下吗?


最后效果

你可能感兴趣的:(popupwindow百度地图API普通地图与卫星地图切换)