1

在 MonoTouch 或 MonoDroid 中将原始触摸点转换为屏幕坐标的正确方法是什么?我的代码在模拟器上运行良好,但点在设备上不准确。这是我到目前为止所拥有的:

    private void Initialize()
    {
        this.Touch += TouchView_Touch;
    }

    void TouchView_Touch(object sender, View.TouchEventArgs e)
    {
        e.ReturnValue = true;
        touchPoints.Add(e.Event.RawX);
        touchPoints.Add(e.Event.RawY);
        this.Invalidate();
    }

    protected override void OnDraw(Android.Graphics.Canvas canvas)
    {
        base.OnDraw(canvas);
        canvas.DrawColor(Color.White);
        Paint p = new Paint();
        p.Color = Color.Black;

        Matrix m = new Matrix();
        canvas.GetMatrix(m);
        float[] destination = touchPoints.ToArray();

        Matrix inverse = new Matrix();
        bool canInvert = m.Invert(inverse);
        inverse.MapPoints(destination);

        canvas.DrawPoints(destination, p);
    }
4

2 回答 2

2

对于 MonoDroid,有几个 StackOverflow Android 问题涉及相同的主题,例如:

如何获取视图的绝对坐标

建议使用View.GetLocationOnScreen(int[])or View.GetLocationInWindow()

还有

Android中的事件坐标和视图坐标不匹配?

这还建议View.GetLocationOnScreen()与获取默认显示的屏幕指标一起使用。

于 2011-02-09T13:15:05.813 回答
0

对于 Monotouch,您可以使用属于所有 UIView 的 ConvertPointToView。它会将点转换为您传入的视图的正确坐标。

于 2011-02-03T22:43:52.367 回答