Android的谷歌地图V2的标签重叠的问题,在选项卡多地图 [英] Android Google map v2 in tab Overlapping issue, Multiple map in tab

查看:177
本文介绍了Android的谷歌地图V2的标签重叠的问题,在选项卡多地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的机器人,现在正与谷歌地图V2的工作,我已经使用tabhost显示谷歌地图V2,在这种tabhost我需要显示不同的选项卡上的两个谷歌地图V2。当我切换/黑白两个选项卡包含的地图选项卡,它得到重叠。我不知道解决这个问题。

I am new to android, now am working with Google maps v2, I have used tabhost to show Google map v2, In this tabhost i need to show two Google maps v2 on different tab. When i switch the tab b/w two tabs which contain map, it get overlapped. I don't know to overcome this issue.

// code是在这里为标签

//code is here for both tab

    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
            .getMap();
    mMap.setMyLocationEnabled(true);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME, MIN_DISTANCE, this);
    Log.e("locamanager",""+locationManager);
    Criteria criteria=new Criteria(); // object to retrieve provider
    String provider = locationManager.getBestProvider(criteria, true);
    Location location=locationManager.getLastKnownLocation(provider);
    if(location!=null){
        onLocationChanged(location);
    }
    locationManager.requestLocationUpdates(provider, 400, 1000, this);


 }


@Override
public void onLocationChanged(Location location) {

    latLng = new LatLng(location.getLatitude(), location.getLongitude());
    Log.e("latlng",""+latLng);
    cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 15);
    mMap.animateCamera(cameraUpdate);
    locationManager.removeUpdates(this);

    new ReverseGeocodingTask(getBaseContext()).execute(latLng);

}

任何人有解决方案,请帮助我。

Anyone have solution please help me

感谢在前进

推荐答案

我也面临着同样的问题,但最后我还是设法做到了这个样子。

I have faced the same issue but finally i managed it in this way.

首先,我创建延伸android.support.v4.app.Fragment独立MyMapFragment类

First of all i create separate MyMapFragment class which extends android.support.v4.app.Fragment

这里是onCreateView方法

here is the onCreateView method

if (view != null) {

            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null)
                parent.removeView(view);
        }

        try {
            view = (ViewGroup) inflater.inflate(R.layout.map_frag, container,
                    false);
            setUpMapIfNeeded();
            showMap(maptype);
        } catch (Exception e) {
        }
        return view;

之后,我创建一个XML文件

after that i create one xml file

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_fragmentView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>

您可以添加此布局文件到您的地图布局的地方

You can add this layout file into your map layout place

最后你可以选择使用这个添加地图视图在activty类

and finally you have to add map view using this one in your activty class

MyMapFragment newFragment = new MyMapFragment (1);
        FragmentTransaction transaction = getActivity()
                .getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.my_fragmentView, newFragment);
        transaction.commit();

它的正常工作在我身边,我希望它可以帮助你。

It's working fine at my side i hope it helps you.

MapFragment code是这里

public class MapFragment extends Fragment {

    private View view;
    private GoogleMap mMapView;

    public TouchableWrapper mTouchView;
    LinearLayout map_fragg;

    String userLat, userLon;

    int maptype = 1;

    Marker lastMarker = null;

    public MapFragment() {
    }

    public MapFragment(int maptype) {
        this.maptype = maptype;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        getView();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        if (container == null) {
            return null;
        }

        if (view != null) {

            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null)
                parent.removeView(view);

            if (mTouchView != null) {
                mTouchView.removeAllViews();
            }

        }

        try {
            mTouchView = new TouchableWrapper(getActivity());
            view = (ViewGroup) inflater.inflate(R.layout.map_frag, null, false);
            view.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT));

            map_fragg = (LinearLayout) view.findViewById(R.id.map_fragg);
            mTouchView.addView(view);
            setUpMapIfNeeded();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return mTouchView;

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    private void showMap(int maptype) {

        switch (maptype) {
        case 1:
            setMapX();
            break;
        case 2:
            setMapXX();
            break;
        case 3:
            setUpMapXXX();
            break;
        default:
            break;
        }
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the
        // map.
        if (mMapView == null) {
            // Try to obtain the map from the SupportMapFragment.

            mMapView = ((SupportMapFragment) getActivity()
                    .getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMapView != null) {
                setUpMap();
                showMap(maptype);
            }
        }
    }

    private void setUpMap() {
        mMapView.setMyLocationEnabled(true);
    }

    // Setting up map for MyProfile Page
    private void setMapX() {
        // Your Code for adding Markers
    }

    // Setting up map for MyProfile Page
    private void setMapXX() {
        // Your Code for adding markers
    }


    public class TouchableWrapper extends FrameLayout {

        public TouchableWrapper(Context context) {
            super(context);
        }

        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                this.getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_UP:
                this.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }
            return super.dispatchTouchEvent(ev);
        }
    }

    @Override
    public void onStop() {
        super.onStop();

        try {
            SupportMapFragment f = (SupportMapFragment) getFragmentManager()
                    .findFragmentById(R.id.map);
            if (f != null)
                getFragmentManager().beginTransaction().remove(f).commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }

    @Override
    public View getView() {
        if (view != null) {
            return view;
        }
        return super.getView();
    }



    private void setUpMapXXX() {
        // Your Code for adding Markers
    }

}

这篇关于Android的谷歌地图V2的标签重叠的问题,在选项卡多地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆