【发布时间】:2013-09-27 05:24:15
【问题描述】:
我正在尝试使用地图跟踪一个人在建筑物内的位置。当用户开始时,他们应该在房间 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" />
地图正确显示如下:
【问题讨论】:
-
嗨 Jonno,我有一个关于这个室内实施的问题。你是如何管理这个圈子的,假设这个当前图像如果我从 lelt 向右滚动而不是你将如何管理这个用户当前位置,因为它总是出现在画布上意味着如果您在右侧当前用户位置滚动此图像,那么您将如何处理此问题,因为此用户位置始终存在于画布上?
-
在应用程序代码中,您需要将用户的当前位置存储为 x,y 坐标。然后当他们移动时,这个变量会被更新,并且他们的位置会在扩展
ImageView的类的onDraw方法中重绘 -
嗨 Jonno,在我的应用程序中,我可以从左到右或从右到左滚动我的地图。所以你提供的解决方案不适用于我的情况,因为当用户从左到右滚动地图时或从右到左的用户位置将可见,即使用户未到达此位置,因为通过使用 onDraw API,我可以绘制圆圈,但无论用户到达或未到达该点(如果地图图像太大),总是可见。通过使用 onDraw API,您无法将用户位置粘贴到地图图像上。
-
感谢您的宝贵时间。
标签: java android imageview scaling