android - 谷歌地图图像如何适合屏幕宽度

时间:2016-04-23 06:42:49

标签: java android

我正在尝试在我的应用中显示谷歌地图的图像,使其与屏幕宽度相匹配。 我使用DisplayMetrics作为以下代码并将其传递给谷歌以获取该大小的图像(请参阅url参数)。但正如您在屏幕截图中看到的那样,它显示错误的宽度。如何解决?我认为我发送的谷歌参数是不正确的?

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int heightP = (int) displaymetrics.heightPixels;
int widthP = (int) displaymetrics.widthPixels;
int height = (int) (displaymetrics.heightPixels / displaymetrics.density);
int width = (int) (displaymetrics.widthPixels / displaymetrics.density);

................

    ImageView imgImage = (ImageView) findViewById(R.id.imgImage);
    //TextView txtDetail = (TextView) findViewById(R.id.txtDetail);

    imgImage.getLayoutParams().width = LayoutParams.MATCH_PARENT;
    imgImage.getLayoutParams().height = (height / 2);
...............

        ImageView gmap = (ImageView) findViewById(R.id.googlemap);
        gmap.getLayoutParams().height = 200;
        //gmap.requestLayout();
        String url = "http://maps.google.com/maps/api/staticmap?center=" + estate.getString("maplat") + "," + estate.getString("maplng") + "&zoom=" + estate.getString("mapzoom") + "&size=" + Integer.toString(widthP - 10) + "x200&sensor=false&format=jpeg&&markers=color:red|" + estate.getString("maplat") + "," + estate.getString("maplng");

        Picasso.with(this)
                .load(url)
                .placeholder(R.drawable.animated_progress)
                .into(gmap);

布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/detailLayer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layoutDirection="rtl"
    android:padding="8dp"
    tools:context=".DetailActivity">


    <ScrollView
        android:id="@+id/scrollview1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:textAlignment="gravity"
            android:textDirection="rtl">

            <Button
                android:id="@+id/btnEdit"
                style="@style/CKButton"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="12dp"
                android:text="@string/txt_manage"
                android:visibility="gone" />

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="-50dp"
                android:src="@drawable/sold"
                android:visibility="gone" />


            <ImageView
                android:id="@+id/imgImage"
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:clickable="true"
                android:paddingBottom="8dp"
                android:paddingTop="8dp"
                android:scaleType="centerCrop"
                android:textAlignment="gravity" />


 </ScrollView>

</FrameLayout>

这是问题的图像:

here is issue

3 个答案:

答案 0 :(得分:0)

尝试在imageview中设置属性android:scaleType="fitXY"

答案 1 :(得分:0)

通过使用XML,只需输入属性

即可
  android:scaleType="fitXY"

到你的ImageView。像

 <ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    **android:scaleType="fitXY"**
    android:src="@drawable/logo" />

通过Java,

imageview.setScaleType(ScaleType.FIT_XY);

答案 2 :(得分:0)

是的,您的url参数不正确,因为您发送的图像宽度为密度像素,这是错误的。

在你的网址中,只需要传递像素值而不是dp(密度像素)值。

有关Google地图网址的详细信息,请阅读this doc

它可以帮助发送哪种类型的参数传递并获得更准确的地图图像大小。

screen_width = getResources().getDisplayMetrics().widthPixels;

String url = "http://maps.google.com/maps/api/staticmap?center=" + estate.getString("maplat") + "," + estate.getString("maplng") + "&zoom=" + estate.getString("mapzoom") + "&size=" + Integer.toString(screen_width - 10) + "x200&sensor=false&format=jpeg&&markers=color:red|" + estate.getString("maplat") + "," + estate.getString("maplng");

并将其传递给您的网址。