信息窗口中的水平列表视图谷歌地图v2

时间:2013-12-14 12:48:49

标签: android listview google-maps-api-2

我在 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>

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

现在您有一个NullPointerException,但即使您将所有图片都放入此InfoWindow布局,您也无法滚动它,因为InfoWindow不是真实视图。它只是一个渲染的SurfaceView。因此,您无法在其上应用onTouchonClick个事件。

来自Google Docshttps://developers.google.com/maps/documentation/android/marker#info_windows

  

注意:绘制的信息窗口不是实时视图。观点是   在它的时候呈现为图像(使用View.draw(Canvas))   回。这意味着对视图的任何后续更改都不会   通过地图上的信息窗口反映出来。更新信息窗口   稍后(例如,在图像加载后),请致电showInfoWindow()。   此外,信息窗口不会考虑任何交互性   典型的普通视图,如触摸或手势事件。不管你   可以在整个信息窗口上收听通用点击事件   在下面的部分中描述。