我在 google map api v2
上创建了一个应用程序我想将来自SD卡的horizontal list view
包含image
放入信息窗口
有我的c ustomwindow adapter class
class CustomInfoWindowAdapter implements InfoWindowAdapter {
private final View mWindow;
private final View mContents;
LinearLayout myGallery;
CustomInfoWindowAdapter() {
mWindow = getLayoutInflater().inflate(R.layout.custom_info_window,
null);
mContents = getLayoutInflater().inflate(
R.layout.custom_info_contents_with_listview, null);
}
@Override
public View getInfoWindow(Marker marker) {
render(marker, mWindow);
return mWindow;
}
@Override
public View getInfoContents(Marker marker) {
render(marker, mContents);
return mContents;
}
private void render(Marker marker, View view) {
int badge = 0;
myGallery = (LinearLayout) findViewById(R.id.mygallery);
// get file from sd card
String ExternalStorageDirectoryPath = Environment
.getExternalStorageDirectory().getAbsolutePath();
String targetPath = ExternalStorageDirectoryPath + "/DCIM/Camera";
File targetDirector = new File(targetPath);
File[] files = targetDirector.listFiles();
if (marker.equals(listMarkers.get(0))) {
for (File file : files) {
myGallery.addView(insertPhoto(file.getAbsolutePath()));
}
}
String title = marker.getTitle();
TextView titleUi = ((TextView) view.findViewById(R.id.title));
if (title != null) {
SpannableString titleText = new SpannableString(title);
titleText.setSpan(new ForegroundColorSpan(Color.RED), 0,
titleText.length(), 0);
titleUi.setText(titleText);
} else {
titleUi.setText("");
}
String snippet = marker.getSnippet();
TextView snippetUi = ((TextView) view.findViewById(R.id.snippet));
if (snippet != null && snippet.length() > 12) {
SpannableString snippetText = new SpannableString(snippet);
snippetText.setSpan(new ForegroundColorSpan(Color.MAGENTA), 0,
10, 0);
snippetText.setSpan(new ForegroundColorSpan(Color.BLUE), 12,
snippet.length(), 0);
snippetUi.setText(snippetText);
} else {
snippetUi.setText("");
}
}
}
当我运行代码时,locat在
显示Null指针执行 for (File file : files) {
myGallery.addView(insertPhoto(file.getAbsolutePath()));
xml代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/mygallery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
/>
</HorizontalScrollView>
提前感谢您的帮助。
答案 0 :(得分:2)
现在您有一个NullPointerException
,但即使您将所有图片都放入此InfoWindow
布局,您也无法滚动它,因为InfoWindow
不是真实视图。它只是一个渲染的SurfaceView
。因此,您无法在其上应用onTouch
或onClick
个事件。
来自Google Docs
:https://developers.google.com/maps/documentation/android/marker#info_windows
注意:绘制的信息窗口不是实时视图。观点是 在它的时候呈现为图像(使用
View.draw(Canvas)
) 回。这意味着对视图的任何后续更改都不会 通过地图上的信息窗口反映出来。更新信息窗口 稍后(例如,在图像加载后),请致电showInfoWindow()
。 此外,信息窗口不会考虑任何交互性 典型的普通视图,如触摸或手势事件。不管你 可以在整个信息窗口上收听通用点击事件 在下面的部分中描述。