2

地図を使用して、建物内の人の位置を追跡しようとしています。ユーザーが開始すると、部屋 307 への出入り口にあるはずですが、描画すると (緑色の円で示されます)、x 軸上では正しく配置されていますが、y 軸上では高すぎます。スケーリング コードまたは配置にエラーはありますか? ユーザーは x=163,y=414 から開始します。canvas.getHeight() は、使用したときに行った値を返しませんfillStartか?

MyImageView の次の onDraw メソッドを作成しました。 MainActivity は、ユーザーが現在どこにいるかを x、y 座標で追跡します。

public class MyImageView extends ImageView {
    private Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
    private float scaleX, scaleY;
    private MainActivity ma;

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        float x = ma.getX();
        float y = ma.getY();
        Drawable d = getResources().getDrawable(R.drawable.ist_level_3);
        scaleX = (float)  d.getIntrinsicWidth() /canvas.getWidth();
        scaleY = (float)  d.getIntrinsicHeight()/canvas.getHeight() ;
        p.setARGB(255, 0, 255, 20);
        p.setStyle(Style.FILL);

        canvas.drawCircle( (x * scaleX), (y * scaleY), 10, p);
        Log.i("MyImageView", String.format(
                "xy %.2f,%.2f Drawing %.2f,%.2f Scales %.2f, %.2f", x, y,
                (x * scaleX), (y * scaleY), scaleX, scaleY));


    }  

私は次のように私のレイアウトでそれを使用しました:

  <com.jonathanmackenzie.indoortracking.MyImageView
        android:id="@+id/istMap"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scaleType="fitStart"
        android:src="@drawable/ist_level_3" 
        android:onClick="resetLocation" />

マップは次のように正しく表示されています。

ここに画像の説明を入力

4

2 に答える 2

1

オブジェクトのsetWillNotDraw(boolean)関数を見ましたか? ImageView多分これもあなたの問題ですか?

ドキュメントの場合:

http://developer.android.com/reference/android/view/View.html#setWillNotDraw(ブール値)

于 2014-03-23T10:40:57.573 に答える