动态增加Google地图中自定义标记的大小

时间:2015-10-19 11:29:24

标签: android google-maps google-maps-markers

在我的谷歌地图应用程序中,我在不同的位置使用自定义标记。我成功实现了这个,但我需要动态增加自定义标记的大小。我使用了以下代码

imgView.getLayoutParams().height = 200;
imgView.getLayoutParams().width = 200;

代码在某些设备上工作正常,但在nexus4和5中,标记非常大。请帮我解决问题

自定义标记XMl

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView     
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:src="@drawable/marker" />

    <TextView           
        android:layout_width="36dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="3dp"
        android:gravity="center"
        android:textColor="#FFFFFF"
        android:textSize="14sp"
        android:textStyle="bold" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

使用

imgView.getLayoutParams().height = 200;

您在像素中指定新高度,忽略当前设备的像素密度。你不应该这样做。

您可以使用当前的方法来放大图像。

int height = imgView.getLayoutParams().height;
imgView.getLayoutParams().height = height * 2;

使它们大2倍。无论设备的像素密度如何,都不会使图像成为硬编码的200像素,如果图像为70像素,则会使图像为140像素,如果为100像素,则为200像素。 这将很好地适应当前的设备。

您也可以使用dp,指定dp值,然后将其转换为像素:

int dp = 72;
int height = imgView.getLayoutParams().height;
imgView.getLayoutParams().height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());

通过将72转换为当前设备的正确像素数,将高度设置为72。