0

背景として表示するマップの画像 (固定サイズ) があり、その上にプレイヤー アイコンを表示したいと考えています。プレイヤーの現在の座標を android.graphic.Point として取得しています。

マージンを設定して RelativeLayout を試してみましたが、うまくいきましたが、ディスプレイを回転させると、アイコンが明らかに別の場所に移動します。また、この絶対配置は異なる画面サイズでは機能しないと思います...

意図したとおりにこれを行う方法について何か提案はありますか?

これは私のXMLです

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:id="@+id/mapLayout"
    tools:context="cz.alois_seckar.vseadventrura.MapActivity">

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:id="@+id/playerIcon"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/player" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/mapImage"
        android:src="@drawable/spacemap"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/back_button"
        android:id="@+id/mapBackButton"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:onClick="goBack"/>

</RelativeLayout>

そして、これは私がプレーヤーアイコンを(再)配置する方法です

RelativeLayout mapLayout = (RelativeLayout) findViewById(R.id.mapLayout);
        mapLayout.removeView(playerIcon);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(40, 40);
            Point playerCoords = game.getWorld().getCurrentSpace().getPosition();
            params.leftMargin = playerCoords.x;
            params.topMargin = playerCoords.y;
        mapLayout.addView(playerIcon, params);
4

1 に答える 1