Google Maps Android API V2 blacking out part of layout

前端 未结 8 1436
-上瘾入骨i
-上瘾入骨i 2021-02-04 13:48

I\'m trying to integrate Google Maps Android API v2 into my Android Application. I\'m placing the Google Map in the middle of my layout. It works great when the layout is able t

8条回答
  •  不知归路
    2021-02-04 14:29

    My workaround: make use of the new snapshot interface from GoogleMap and display a snapshot of the map while scrolling the page.

    Here is my code to setting the snapshot (it's in the same fragment as map, called FragmentMap.java):

    public void setSnapshot(int visibility) {
        switch(visibility) {
        case View.GONE:
            if(mapFragment.getView().getVisibility() == View.VISIBLE) {
                getMap().snapshot(new SnapshotReadyCallback() {
                    @Override
                    public void onSnapshotReady(Bitmap arg0) {
                        iv.setImageBitmap(arg0);
                    }
                });
                iv.setVisibility(View.VISIBLE);
                mapFragment.getView().setVisibility(View.GONE);
            }
            break;
        case View.VISIBLE:
            if(mapFragment.getView().getVisibility() == View.GONE) {
                mapFragment.getView().setVisibility(View.VISIBLE);
                iv.setVisibility(View.GONE);
            }
            break;
        }
    }
    

    Where "mapFragment" is my SupportedMapFragment and "iv" is an ImageView (make it match_parent).

    And here I am controlling the scroll:

    pager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                if(position == 0 && positionOffsetPixels > 0 || position == 1 && positionOffsetPixels > 0) {
                    ((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.GONE);
                } else if(position == 1 && positionOffsetPixels == 0) {
                    ((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.VISIBLE);
                }
            }
            @Override
            public void onPageScrollStateChanged(int arg0) {}
            @Override
            public void onPageSelected(int arg0) {}
        });
    

    My fragment with map (FragmentMap) is on position 1, so I need to controll the scroll from position 0 to 1 and from position 1 to 2 (the first if-clause). "getRegisteredFragment()" is a function in my custom FragmentPagerAdapter, in which I have a SparseArray(Fragment) called "registeredFragments".

    So, whenever you scroll to or from your map, you always see a snapshot of it. This works very well for me.

提交回复
热议问题