2011-01-06 3 views
1

Каков правильный способ перевода необработанных точек касания в координаты экрана в MonoTouch или MonoDroid? Мой код хорошо работает на эмуляторе, но точки неточны на устройстве. Вот то, что я до сих пор: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

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

How to get the absolute coordinates of a view

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

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

mismatch of event coordinates and view coordinates in Android?

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

0

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

Смежные вопросы