我使用Picasso检索Bitmap图像以用作标记图标并成功应用。但我需要动态增加所有设备的自定义标记的大小。因为我的代码在下面,它在某些设备上运行良好,但在其他设备中,标记非常大。
这是我的代码
dest = new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude());
markerOption = new MarkerOptions().position(dest);
location_marker = mMap.addMarker(markerOption);
Target target = new PicassoMarker(location_marker);
targets.add(target);
Picasso.with(MapsActivity.this).load(myMarker.getmIcon()).resize(84, 125).into(target);
mMarkersHashMap.put(location_marker, myMarker);
请帮我解决问题。
提前致谢。
答案 0 :(得分:2)
根据您提供的代码,您只需修改此行中resize()
中传递的值:
Picasso.with(MapsActivity.this).load(myMarker.getmIcon()).resize(84, 125).into(target);
我试了一下,你的代码显示了这个:
然后我修改了resize()
中的值,如下所示:
Picasso.with(MapsActivity.this).load(myMarker.getmIcon()).resize(184, 1125).into(target);
结果是这样的:
传递给resize()
的价值取决于你。 ;)
修改强>
如果您根据屏幕尺寸关注 值,则可以从其他帖子中引用此answer。这就是它所说的 -
您可以在代码中使用LayoutParams
执行此操作。不幸的是,没有办法通过XML指定百分比(不是直接,你可以搞乱权重,但这并不总是有帮助,它不会保持你的宽高比),但这应该适合你:
//assuming your layout is in a LinearLayout as its root
LinearLayout layout = (LinearLayout)findViewById(R.id.rootlayout);
ImageView image = new ImageView(this);
image.setImageResource(R.drawable.image);
int newHeight = getWindowManager().getDefaultDisplay().getHeight() / 2;
int orgWidth = image.getDrawable().getIntrinsicWidth();
int orgHeight = image.getDrawable().getIntrinsicHeight();
//double check my math, this should be right, though
int newWidth = Math.floor((orgWidth * newHeight) / orgHeight);
//Use RelativeLayout.LayoutParams if your parent is a RelativeLayout
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
newWidth, newHeight);
image.setLayoutParams(params);
image.setScaleType(ImageView.ScaleType.CENTER_CROP);
layout.addView(image);
- 这是一个很好的例子,只需测量布局,将其用作如何调整图像大小的参考。