MonoTouch / MonoDroid - перевод необработанных сенсорных координат в экранные координаты - PullRequest
1 голос
/ 06 января 2011

Как правильно переводить необработанные точки касания в координаты экрана в 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);
    }

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Для MonoDroid существует несколько вопросов StackOverflow для Android, посвященных одной и той же теме, например:

Как получить абсолютные координаты вида

, который предлагает использовать View.GetLocationOnScreen(int[]) или View.GetLocationInWindow().

Также существует

несоответствие событиякоординаты и просмотр координат в Android?

, который также предлагает использовать View.GetLocationOnScreen() наряду с получением метрик экрана для отображения по умолчанию.

0 голосов
/ 04 февраля 2011

Для Monotouch вы можете использовать ConvertPointToView, который является частью всех UIViews.Он преобразует точку в правильную координату для вида, который вы передаете.

...