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

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

首先写个布局文件 layers_item_layout.xml

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    "@+id/normalmap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/normal_map_mode" 
        android:layout_marginRight="10dp"/>

    "@+id/weixingmap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/weixing_map_mode"
        />

PopupWindow百度地图API普通地图与卫星地图切换_第1张图片
在地图主界面添加一个类似开关的图标

"@+id/iv_map_mode"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/searchView1"
            android:layout_marginRight="5dp"
            android:layout_marginTop="16dp"
            android:src="@drawable/map_mode" />

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
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android">

    "@drawable/search_biaozhun_selected" android:state_pressed="true"/>
    "@drawable/search_biaozhun"/>



weixing_map_mode.xml
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android">

    "@drawable/map_weixing_selected" android:state_pressed="true"/>
    "@drawable/map_weixing"/>

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

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

你可能感兴趣的:(android)