android:自定义ImageView onDraw方法无法在y轴上正确绘制

时间:2013-09-27 05:24:16

标签: java android imageview scaling

我正在尝试使用地图跟踪某人在建筑物内的位置。当用户启动时,它们应该在房间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" />

地图正确显示如下:

enter image description here

2 个答案:

答案 0 :(得分:1)

您是否查看了setWillNotDraw(boolean)对象上的ImageView函数?它帮助了我也许这也是你的问题?

对于文档:

http://developer.android.com/reference/android/view/View.html#setWillNotDraw(boolean)

答案 1 :(得分:0)

显而易见的。你忘了Y = 0就在屏幕的顶部。虽然您的入口很可能是在标准坐标系中提供的,底部为0。