Monotouch/monodroid - ترجمة إحداثيات اللمس الخام إلى إحداثيات الشاشة
-
30-09-2019 - |
سؤال
ما هي الطريقة الصحيحة لترجمة نقاط اللمس الخام إلى إحداثيات الشاشة في 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);
}
المحلول
بالنسبة إلى Monodroid ، هناك العديد من أسئلة Android Stackoverflow التي تتناول نفس الموضوع ، على سبيل المثال:
مما يوحي باستخدام View.GetLocationOnScreen(int[])
أو View.GetLocationInWindow()
.
يوجد ايضا
وهو ما يشير أيضًا إلى استخدام View.GetLocationOnScreen()
جنبا إلى جنب مع الحصول على مقاييس الشاشة للشاشة الافتراضية.
نصائح أخرى
بالنسبة لـ Monotouch ، يمكنك استخدام ConvertoVointing الذي يعد جزءًا من جميع Uiviews. سيقوم بتحويل النقطة إلى الإحداثي الصحيح للعرض الذي تنقله.
لا تنتمي إلى StackOverflow