Monotouch/monodroid - ترجمة إحداثيات اللمس الخام إلى إحداثيات الشاشة

StackOverflow https://stackoverflow.com/questions/4618405

سؤال

ما هي الطريقة الصحيحة لترجمة نقاط اللمس الخام إلى إحداثيات الشاشة في 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().

يوجد ايضا

عدم تطابق إحداثيات الأحداث وإحداثيات العرض في Android؟

وهو ما يشير أيضًا إلى استخدام View.GetLocationOnScreen() جنبا إلى جنب مع الحصول على مقاييس الشاشة للشاشة الافتراضية.

نصائح أخرى

بالنسبة لـ Monotouch ، يمكنك استخدام ConvertoVointing الذي يعد جزءًا من جميع Uiviews. سيقوم بتحويل النقطة إلى الإحداثي الصحيح للعرض الذي تنقله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top