Scrollview中的Android Google Maps v2在某些设备上显示灰色图块

时间:2015-08-15 11:35:12

标签: android google-maps

Scrollview中有Android Google Maps v2 它适用于许多设备,但在某些设备上显示灰色瓷砖 API KEY是正确

要在Scrollview中使用Google Maps V2,应使用自定义类扩展 SupportMapFragment ,如下所示:

import {DefaultGlobal, AnotherGlobal} from 'YOUR_NAMESPACE';

还设置:

public class WorkaroundMapFragment extends SupportMapFragment {
    private OnTouchListener mListener;

    @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle savedInstance) {
        View layout = super.onCreateView(layoutInflater, viewGroup, savedInstance);

        TouchableWrapper frameLayout = new TouchableWrapper(getActivity());

        frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));

        ((ViewGroup) layout).addView(frameLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

        return layout;
    }

    public void setListener(OnTouchListener listener) {
        mListener = listener;
    }

    public interface OnTouchListener {
        public abstract void onTouch();
    }

    public class TouchableWrapper extends FrameLayout {

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

        @Override
        public boolean dispatchTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    mListener.onTouch();
                    break;
                case MotionEvent.ACTION_UP:
                    mListener.onTouch();
                    break;
            }
            return super.dispatchTouchEvent(event);
        }
    }
}

用户拍摄的图片 Android版 4.2.2 设备 Samsung Grand 2

应用程序测试:三星Galaxy Tab 2 10.1“:4.0.3 华硕Fonepad 7”平板电脑:5.0.1 效果很好

    ((WorkaroundMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).setListener(new WorkaroundMapFragment.OnTouchListener() {
            @Override
            public void onTouch() {
                mScrollViewDa.requestDisallowInterceptTouchEvent(true);
            }
        });

enter image description here

2 个答案:

答案 0 :(得分:1)

对于类似的问题,我采取了不同的方法。

是的,你是对的,你不能直接将地图放到ScrollView中......但你可以拥有一个FrameLayout并在运行时用地图替换它。像这样:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="-100dp"
    android:layout_marginBottom="-100dp"
    android:id="@+id/mapViewDetail"
    android:scaleType="centerCrop"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_above="@+id/bottom_layout"
    tools:context="com.yourpackage.app.HomeActivity"
    tools:ignore="MergeRootFrame" />

然后我创建了一个自定义地图,因为我需要一些&#34;调整&#34; (如果您使用默认地图,则可以避免此步骤):

public abstract class MiniMapFragment extends MapFragment {

    @Override
    public View onCreateView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2) {
        View v = super.onCreateView(arg0, arg1, arg2);
        initMap();
        return v;
    }

    public abstract void initMap();
}

然后,在我刚刚添加的片段中:

    MiniMapFragment mMapFragment = new MiniMapFragment() {
        @Override
        public void initMap() {
            googleMap = getMap();
            getMap().getUiSettings().setMyLocationButtonEnabled(false);
            getMap().getUiSettings().setZoomControlsEnabled(false);
            getMap().getUiSettings().setScrollGesturesEnabled(false);
        }
    };

    FragmentTransaction fragmentTransaction =
            getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.mapViewDetail, mMapFragment);
    fragmentTransaction.commit();
    getFragmentManager().executePendingTransactions();

    MapsInitializer.initialize(this);

你应该没事。

答案 1 :(得分:1)

我不完全确定这是否会回答你的问题,但值得研究。

根据您的问题和评论,它似乎是伊朗用户在特定设备上接收灰显的地图。由于我不确定用户的确切位置,因此我对伊朗及周边地区的Google地图的可访问性进行了一些研究。
该用户可能正在尝试查找故意变灰的地图。

Satellite map images with missing or unclear data

并非所有内容都会在Google地图上显示。

Blurred Out: 51 Things You Aren't Allowed to See on Google Maps

几年前,消费者在伊朗使用谷歌,而伊朗希望制作伊斯兰地球地图,这些都存在问题。

Iran plans 'Islamic Google Earth'

然而,这似乎已经解决了那些可以访问该地区谷歌地图的人。

这也是伊朗附近美军基地的地图。其中有很多并且至少可能模糊,如果不是灰色的话。

American Military Bases Near Iran

同样在邻国的伊拉克,也存在过时的空中镜头问题。

when Iraq will get new satellite imagery update

此外,伊朗的互联网审查政策和“智能过滤”的使用

Iran expands 'smart' Internet censorship我不确定这是否会影响某些地区对Google地图的访问。

我建议询问用户的具体位置,或询问地图是否出现在某些地方,而不是其他地方。

希望这有帮助。

修改

Galaxy Grand Duos (GT-I9082)最近才更新为4.2.2。

multiple issues with the jelly bean update for the Samsung Grand 2

如果您的用户最近升级了手机,则可能需要检查此信息 虽然以下链接并非特定于谷歌地图,但它仍然有用。 Samsung Galaxy Grand: Slow Performance after JB 4.2.2 upgrade.

除了调查特定的设备以及我之前提到的任何问题之外,在这个阶段我没有什么可以提供给你的。