我使用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);
}
这个函数给了我真正的回复。那么如何检查是否会显示标记?
答案 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上的原因。