【发布时间】:2017-01-25 21:07:35
【问题描述】:
我正在尝试以编程方式布局自定义 infoWindow。我想使用 Picasso 加载街景预览图像,但图像没有显示,知道为什么吗?
private View prepareInfoView(Marker marker){
//prepare InfoView programmatically
LinearLayout infoView = new LinearLayout(EarthquakeActivity.this);
LinearLayout.LayoutParams infoViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
infoView.setOrientation(LinearLayout.VERTICAL);
// attach the above layout to the infoView
infoView.setLayoutParams(infoViewParams);
//create street view preview @ top
ImageView streetViewPreviewIV = new ImageView(EarthquakeActivity.this);
// this scales the image to match parents WIDTH?, but retain image's height??
LinearLayout.LayoutParams streetViewImageViewParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
streetViewPreviewIV.setLayoutParams(streetViewImageViewParams);
String imageURL = "https://maps.googleapis.com/maps/api/streetview?size=200x200&location=";
String markerLongitude = Double.toString(marker.getPosition().longitude);
String markerLatitude = Double.toString(marker.getPosition().latitude);
imageURL += markerLatitude + "," + markerLongitude + "&fov=120&heading=0&pitch=0";
Log.wtf("prepareInfoView", imageURL);
Picasso.with(this).load(imageURL).into(streetViewPreviewIV);
infoView.addView(streetViewPreviewIV);
我尝试过使用和不使用附加 url 的 api 键。
它确实可以在没有密钥的情况下点击几下,但从那以后不管有没有都没有。是因为它获取它的速度太慢所以Android放弃并在没有它的情况下加载信息窗口?是否有同类最佳的方法来做到这一点?
另一个图像加载库会更好吗?谷歌的凌空?
还有
LinearLayout.LayoutParams
我希望图像跨越信息窗口的宽度,即 match_parent,并垂直缩放以保持原始纵横比,我该怎么做?
这是我的答案
在 commonsWare 新类中我添加了这个标志:
@Override
public void onSuccess() {
Log.i(TAG, "image got, should rebuild window");
if (marker != null && marker.isInfoWindowShown()) {
Log.i(TAG, "conditions met, redrawing window");
marker.setTag(new Boolean("True"));
marker.showInfoWindow();
}
}
在 prepareInfoView 中,我测试标志是否缺失。
if (marker.getTag() == null ) {
Log.i("prepareInfoView", "fetching image");
Picasso.with(this).load(imageURL).fetch(new MarkerCallback(marker));
}
else {
Log.wtf("prepareInfoView", "building info window");
开派对! :)
【问题讨论】:
标签: android google-maps picasso infowindow