在一些Android设备上自定义标记空白屏幕

时间:2015-03-23 18:59:41

标签: android google-maps

我使用google android map v2实现了自定义标记。它在某些设备上运行良好,在某些设备上自定义标记显示为空白。我的自定义标记xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

            <TextView
                android:id="@+id/markerText1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"/>

            <TextView
                android:id="@+id/markerText2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />

            <TextView
                android:id="@+id/markerText3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />
            <TextView
                android:id="@+id/markerText4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/markerImage1"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/ic_action_call"
            android:contentDescription="Map Info"/>
            <TextView
                android:id="@+id/markerText5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tap Here for more."
                />
    </LinearLayout>
</LinearLayout>

我在java文件中实现了它,如下所示:

    SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.fp_map);
    map = fm.getMap();
    if(map != null){

        map.setIndoorEnabled(false);
        map.setOnCameraChangeListener(getCameraChangeListener());
        //add custom window here
        map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
            @Override
            public View getInfoWindow(Marker marker) {
                return null;
            }

            @Override
            public View getInfoContents(Marker marker) {
                View v = null;
                try {
                    if(!marker.getTitle().equalsIgnoreCase("diff")) {
                        try {
                            v = getLayoutInflater().inflate(R.layout.info_window, null);
                            TextView title = (TextView) v.findViewById(R.id.markerText1);
                            TextView midMsg = (TextView) v.findViewById(R.id.markerText2);
                            TextView BelowMsg1 = (TextView) v.findViewById(R.id.markerText3);
                            TextView BelowMsg2 = (TextView) v.findViewById(R.id.markerText4);

                            String[] data = marker.getSnippet().split("\\|\\|");
                            title.setText(marker.getTitle());
                            midMsg.setText(data[0]);
                            BelowMsg1.setText("check here:" + data[2]);
                            BelowMsg2.setText(data[1] + "check here also");
                            return v;
                        } catch (Exception e) {
                            String error = e.getMessage();
                        }
                    } else {
                        return null; //so that normal view can be generted.
                    }
                } catch (Exception e){
                    String error1 = e.getMessage();
                    return null;
                }
                return v;
            }
        });

    }

最后我添加如下标记:

BitmapDescriptor loaded_icon;
loaded_icon = BitmapDescriptorFactory.fromResource(R.drawable.smiley_f);
map.addMarker((new MarkerOptions().position(new LatLng(Double.parseDouble(data[1]), Double.parseDouble(data[2])))
                                            .title(data[0])
                                            .snippet(data[5] + "||" + data[6] + "||" + data[7])
                                            .icon(loaded_icon)))
                                            .showInfoWindow();

以上添加标记代码是循环的,因此可以向用户显示不同的标记。现在我的问题是对于许多用户而言它工作得很好但是对于某些手机(例如HTC WILDFIRE)它将空白屏幕作为标记与我在xml文件中提到过的图片。

我也得到以下错误,不确定它是否与上述问题有关。 在打开地图页面之前,这个错误就开始了。

E / copybit?打开帧缓冲区错误errno = 13(权限被拒绝)

W / Adreno200的-EGLSUB? :updater_create_surface_state无法打开copybit,错误:-13

谷歌,但没有找到帮助。 请帮忙。谢谢提前

我试图用以下函数检查openGL

private boolean detectOpenGLES20() {
        ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        ConfigurationInfo info = am.getDeviceConfigurationInfo();
        return (info.reqGlEsVersion >= 0x20000);
    }

这个函数给了我真正的回复。那么如何检查是否会显示标记?

1 个答案:

答案 0 :(得分:0)

要使用Google Maps API v2,它需要设备能够运行OpenGL ES 2.0或更高版本,正如它提到的here

然而,一些较旧的手机(主要是2.2或之前),包括HTC Wildfire, has no GPU and does not support OpenGL ES 2.0

所以这可能是它无法出现在你的HTC Wildfire上的原因。