يتوافق Android مع مجموعة متنوعة من الشاشات التي تعمل باللمس ولوحات اللمس، بما في ذلك: الأجهزة اللوحية المزوّدة بقلم الشاشة الرقمية.
الشاشات التي تعمل باللمس هي أجهزة تعمل باللمس ومرتبطة بشاشة معيَّنة يكون لدى المستخدم انطباع بالتلاعب المباشر بالعناصر على الشاشة.
لوحات اللمس هي أجهزة تعمل باللمس غير مرتبطة بشاشة، مثل جهاز التحويل الرقمي. تُستخدَم لوحات اللمس عادةً للإشارة أو لتحديد موضع مطلق غير مباشر أو التحكّم في واجهة المستخدم استنادًا إلى الإيماءات.
يمكن أن تحتوي الأجهزة التي تعمل باللمس على أزرار لها وظائف مشابهة لأزرار الماوس.
يمكن أحيانًا التلاعب بالأجهزة التي تعمل باللمس باستخدام مجموعة متنوّعة من الأدوات المختلفة. مثل الأصابع أو قلم الشاشة، اعتمادًا على تقنية أداة استشعار اللمس الأساسية.
وفي بعض الأحيان، يتم استخدام الأجهزة التي تعمل باللمس لتنفيذ المفاتيح الافتراضية. على سبيل المثال، في في بعض أجهزة Android، تمتد منطقة أداة استشعار الشاشة التي تعمل باللمس إلى ما وراء حافة الشاشة وتعمل بشكل مزدوج كجزء من لوحة مفاتيح حساسة للمس.
بسبب التنوع الكبير في الأجهزة التي تعمل باللمس، يعتمد Android على عدد كبير من خصائص الضبط لوصف الخصائص والسلوك المطلوبين لكل جهاز.
تصنيف الجهاز الذي يعمل باللمس
يتم تصنيف جهاز الإدخال على أنّه جهاز متعدّد اللمس إذا كان كلا الشرطين التاليين مفعّلاَين:
- يشير جهاز الإدخال إلى توفُّر جهاز
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
محور مطلق. - لا يحتوي جهاز الإدخال على أي أزرار لوحدة التحكّم في الألعاب. يحلّ هذا الشرط الغموض في بعض أجهزة التحكّم في الألعاب التي تُبلغ عن محاور باستخدام رموز تتداخل مع رموز محاور MT.
يتم تصنيف جهاز الإدخال على أنّه جهاز لمسة واحدة إذا كان كلا الشرطين التاليين مفعّلاَين:
- عدم تصنيف جهاز الإدخال على أنّه جهاز يعمل باللمس المتعدّد يتم تصنيف جهاز الإدخال إما كجهاز لمس واحد أو كجهاز لمس متعدّد، وليس كليهما.
- يُبلغ جهاز الإدخال عن توفّر محورَي القصوى
ABS_X
وABS_Y
، وتوفّر رمز المفتاحBTN_TOUCH
.
عندما يتم تصنيف جهاز إدخال على أنّه جهاز يعمل باللمس، يتم تحديد توفّر المفاتيح الافتراضية من خلال محاولة تحميل ملف ربط المفاتيح الافتراضية للجهاز. في حال توفّر خريطة مفاتيح افتراضية، يجب اختيار تحميل ملف على الجهاز أيضًا. راجِع [ملفات خريطة المفاتيح الافتراضية](#virtual-key-map-files) للحصول على معلومات عن موقع هذه الملفات وتنسيقها.
بعد ذلك، يُحمِّل النظام ملف إعداد جهاز الإدخال للجهاز الذي يعمل باللمس.
يجب أن تحتوي جميع الأجهزة المزوّدة بشاشة تعمل باللمس على ملفات ضبط أجهزة الإدخال. في حال عدم توفُّر ملف إعداد جهاز إدخال، سيجري النظام اختيار ضبط تلقائي مناسب للأغراض العامة الأجهزة الملحقة التي تعمل باللمس، مثل الشاشات الخارجية التي تعمل باللمس USB أو التي تتضمن بلوتوث HID أو الألواح التي تعمل باللمس. هذه الإعدادات التلقائية غير مصمّمة للشاشات اللمسية المدمجة، وقد يؤدي استخدامها إلى ظهور سلوك غير صحيح.
بعد تحميل إعدادات جهاز الإدخال، يصنف النظام جهاز الإدخال على أنّه شاشة تعمل باللمس أو لوحة لمس أو مؤشر.
- يُستخدَم جهاز شاشة لمس للتلاعب المباشر بالعناصر على الشاشة. يلمس المستخدم الشاشة مباشرةً، لذا لا يحتاج النظام إلى أي ميزات إضافية للإشارة إلى العناصر التي يتم التحكّم فيها.
- يُستخدَم جهاز لوحة اللمس لتقديم معلومات تحديد الموقع المطلق لتطبيق معيّن عن اللمسات في منطقة معيّنة من أداة الاستشعار. يمكن أن يكون مفيدًا للأجهزة اللوحية المزوّدة بأجهزة تحويل رقمي.
- يُستخدم جهاز المؤشر في معالجة الأجسام على الشاشة باستخدام مؤشر. يتم تفسير الأصابع على أنّها مؤشر تعمل باللمس المتعدّد الإيماءات. يتم تفسير الأدوات الأخرى، مثل الأقلام، باستخدام مواضع مطلقة. عرض مؤشر اللمس المتعدد غير المباشر الإيماءات لمزيد من المعلومات.
تُستخدَم القواعد التالية لتصنيف جهاز الإدخال كشاشة تعمل باللمس: أو لوحة لمس أو جهاز مؤشر.
- في حال ضبط السمة
touch.deviceType
، يتم ضبط نوع الجهاز على النحو الموضَّح. - إذا أبلغ جهاز الإدخال عن توفُّر
INPUT_PROP_DIRECT
خاصية الإدخال (من خلال ioctlEVIOCGPROP
)، فإن نوع الجهاز الضبط على شاشة تعمل باللمس يفترض هذا الشرط أن لمس الإدخال المباشر الأجهزة المتصلة بشاشة أخرى متصلة كذلك. - إذا أبلغ جهاز الإدخال عن توفُّر
INPUT_PROP_POINTER
خاصية الإدخال (من خلال ioctlEVIOCGPROP
)، ثم نوع الجهاز اضبط على مؤشر - إذا أبلغ جهاز الإدخال عن توفُّر
REL_X
أوREL_Y
بالنسبة إلى المحاور النسبية، يتم ضبط نوع الجهاز على لوحة اللمس. يزيل هذا الشرط الغموض في أجهزة الإدخال التي تتألف من ماوس ولوحة لمس. في هذه الحالة، لا يتم استخدام لوحة اللمس للتحكّم في المؤشر لأنّ الماوس يتحكّم فيه. - وبخلاف ذلك، يتم ضبط نوع الجهاز على مؤشر. يضمن هذا الإعداد التلقائي أنّ لوحات اللمس التي لم يتم تخصيصها لأي غرض خاص آخر تتحكّم في المؤشر.
الأزرار
الأزرار هي عناصر تحكّم اختيارية يمكن للتطبيقات استخدامها لتنفيذ وظائف إضافية. تعمل الأزرار الموجودة على الأجهزة التي تعمل باللمس بشكل مشابه للماوس تُستخدَم بشكل أساسي مع أجهزة المؤشر التي تعمل باللمس أو مع قلم الشاشة.
يمكن استخدام الأزرار التالية:
BTN_LEFT
: تم ربطها بـMotionEvent.BUTTON_PRIMARY
.BTN_RIGHT
: تم ربطها بالوحدة التنظيميةMotionEvent.BUTTON_SECONDARY
.BTN_MIDDLE
: تم ربطها بالوحدة التنظيميةMotionEvent.BUTTON_MIDDLE
.BTN_BACK
وBTN_SIDE
: تم ربطهما بـMotionEvent.BUTTON_BACK
. يؤدي الضغط على هذا الزر أيضًا إلى تركيب ضغطة مفتاح باستخدام رمز المفتاحKeyEvent.KEYCODE_BACK
.BTN_FORWARD
وBTN_EXTRA
: تم التعيين إلىMotionEvent.BUTTON_FORWARD
يؤدي الضغط على هذا الزر أيضًا إلى تركيب ضغطة مفتاح باستخدام رمز المفتاحKeyEvent.KEYCODE_FORWARD
.BTN_STYLUS
: تم ربطها بالوحدة التنظيميةMotionEvent.BUTTON_SECONDARY
.BTN_STYLUS2
: تم تعيينه إلىMotionEvent.BUTTON_TERTIARY
.
الأدوات وأنواعها
الأداة هي إصبع أو قلم أو جهاز آخر يُستخدَم للتفاعل مع الجهاز الذي يعمل باللمس. يمكن لبعض الأجهزة التي تعمل باللمس التمييز بين وأنواع الأدوات.
في أي مكان آخر في Android، مثل واجهة برمجة تطبيقات MotionEvent
، غالبًا ما يُشار إلى الأداة
كمؤشر.
تتوفّر أنواع الأدوات التالية:
BTN_TOOL_FINGER
وMT_TOOL_FINGER
: تم ربطهما بحسابMotionEvent.TOOL_TYPE_FINGER
.BTN_TOOL_PEN
وMT_TOOL_PEN
: تم التعيين إلىMotionEvent.TOOL_TYPE_STYLUS
BTN_TOOL_RUBBER
: تم ربطها بالوحدة التنظيميةMotionEvent.TOOL_TYPE_ERASER
.BTN_TOOL_BRUSH
: تم تعيينه إلىMotionEvent.TOOL_TYPE_STYLUS
.BTN_TOOL_PENCIL
: تم تعيينه إلىMotionEvent.TOOL_TYPE_STYLUS
.BTN_TOOL_AIRBRUSH
: تم ربطها بالوحدة التنظيميةMotionEvent.TOOL_TYPE_STYLUS
.BTN_TOOL_MOUSE
: تم تعيينه إلىMotionEvent.TOOL_TYPE_MOUSE
.BTN_TOOL_LENS
: تم ربطها بـMotionEvent.TOOL_TYPE_MOUSE
.BTN_TOOL_DOUBLETAP
وBTN_TOOL_TRIPLETAP
وBTN_TOOL_QUADTAP
: تم ربطها بـMotionEvent.TOOL_TYPE_FINGER
.
استخدام أدوات التمرير فوق العناصر بدلاً من لمسها
يمكن أن تكون الأدوات إمّا تلامس الجهاز الذي يعمل باللمس أو تكون في النطاق مع التمرير فوقها. فوقها. لا يمكن لبعض الأجهزة التي تعمل باللمس استشعار توفُّر أداة التمرير فوق الجهاز الذي يعمل باللمس أما تلك التي ترصدها، مثل أدوات تحويل الخطوط إلى رقمية المستندة إلى تقنية التردد اللاسلكي، فغالبًا ما يمكنها رصد الأداة عندما تكون ضمن نطاق محدود من أداة تحويل الخطوط إلى رقمية.
يميّز المكوِّن InputReader
بين أدوات اللمس من التمرير
وبالمثل، يتم الإبلاغ عن أدوات اللمس وأدوات التمرير فوق العناصر للتطبيقات
بطرق مختلفة.
إبلاغ التطبيقات بأدوات اللمس كأحداث لمس
باستخدام MotionEvent.ACTION_DOWN
وMotionEvent.ACTION_MOVE
MotionEvent.ACTION_DOWN
,
MotionEvent.ACTION_POINTER_DOWN
وMotionEvent.ACTION_POINTER_UP
يتم الإبلاغ عن أدوات التمرير للتطبيقات كأحداث حركة عامة باستخدام
MotionEvent.ACTION_HOVER_ENTER
، MotionEvent.ACTION_HOVER_MOVE
،
وMotionEvent.ACTION_HOVER_EXIT
.
متطلبات برنامج تشغيل الجهاز الذي تعمل باللمس
- يجب على برامج تشغيل الأجهزة التي تعمل باللمس تسجيل المحاور ورموز المفاتيح فقط للمحاور.
والأزرار التي تتوافق معها يمكن أن يؤدي تسجيل محاور أو رموز مفاتيح غير متوافقة
إلى إرباك خوارزمية تصنيف الأجهزة أو جعل النظام يرصد ميزات الجهاز
بشكل غير صحيح. على سبيل المثال، إذا أبلغ الجهاز عن رمز المفتاح
BTN_TOUCH
، يفترض النظام أنّه يتم استخدامBTN_TOUCH
دائمًا للإشارة إلى ما إذا كانت الأداة تلامس الشاشة. لذلك، يجب عدم استخدام الرمزBTN_TOUCH
للإشارة إلى أنّ الأداة في النطاق فقط ويتم تمرير مؤشر الماوس فوقها. - تستخدم الأجهزة التي تعمل باللمسة الواحدة أحداث الإدخال التالية في Linux:
-
ABS_X
: (سمة مطلوبة) لعرض الإحداثي X للأداة. ABS_Y
: (مطلوبة) تعمل على الإبلاغ عن الإحداثي Y للأداة.ABS_PRESSURE
: (اختياري) يعمل على الإبلاغ عن الضغط المادي المطبَّق على الرأس. الأداة أو قوة إشارة الاتصال باللمس.ABS_TOOL_WIDTH
: (اختياري) يقدم تقارير حول مساحة المقطع العرضي أو عرض جهة اتصال اللمس أو الأداة نفسها.ABS_DISTANCE
: (اختياري) يُبلغ هذا الحقل عن مسافة الأداة من السطح في الجهاز الذي يعمل باللمس.-
ABS_TILT_X
: (اختياري) للإبلاغ عن إمالة الأداة من سطح جهاز اللمس على طول محور X ABS_TILT_Y
: (اختياري) يبلِّغ عن إمالة الأداة من سطح جهاز اللمس على طول المحور ص.-
BTN_TOUCH
: (سمة مطلوبة) تشير إلى ما إذا كانت الأداة تلامس الجهاز. - "
BTN_LEFT
" و"BTN_RIGHT
" و"BTN_MIDDLE
" و"BTN_BACK
"BTN_SIDE
،BTN_FORWARD
،BTN_EXTRA
،BTN_STYLUS
،BTN_STYLUS2
: (اختياري) حالات زر التقارير. BTN_TOOL_FINGER
،BTN_TOOL_PEN
،BTN_TOOL_RUBBER
،BTN_TOOL_BRUSH
،BTN_TOOL_PENCIL
،BTN_TOOL_AIRBRUSH
،BTN_TOOL_MOUSE
،BTN_TOOL_LENS
،BTN_TOOL_DOUBLETAP
،BTN_TOOL_TRIPLETAP
،BTN_TOOL_QUADTAP
: (اختياري) يُبلغ عن نوع الأداة.
-
- تستخدم الأجهزة المزوّدة بشاشة تعمل باللمس المتعدّد أحداث الإدخال التالية في Linux:
-
ABS_MT_POSITION_X
: (سمة مطلوبة) لعرض الإحداثي X للأداة. ABS_MT_POSITION_Y
: (مطلوبة) تعمل على الإبلاغ عن الإحداثي Y للأداة.-
ABS_MT_PRESSURE
: (اختياري) لتسجيل الضغط المادي الذي يتم تطبيقه على طرف الأداة أو قوة إشارة الاتصال باللمس -
ABS_MT_TOUCH_MAJOR
: (اختياري) للإبلاغ عن المنطقة العرضية للنقطة التي تم لمسها، أو طول أطول سمة للنقطة التي تم لمسها -
ABS_MT_TOUCH_MINOR
: (اختياري) يُستخدَم لتسجيل طول السمة الأقصر لنقطة الاتصال بالشاشة. يجب عدم استخدام هذا المحور في حال كانت قيمةABS_MT_TOUCH_MAJOR
عن قياس المنطقة. -
ABS_MT_WIDTH_MAJOR
: (اختياري) يُستخدَم لتسجيل المساحة العرضية للأداة نفسها، أو طول أطول سمة للأداة نفسها. لا تستخدِم هذا المحور ما لم تكن تعرف أبعاد الأداة نفسها. -
ABS_MT_WIDTH_MINOR
: (اختياري) يُستخدَم لتسجيل طول السمة الأقصر للأداة نفسها. يجب عدم استخدام هذا المحور في حال إبلاغABS_MT_WIDTH_MAJOR
قياس المساحة أو إذا كانت أبعاد الأداة نفسها غير معروفة. ABS_MT_ORIENTATION
: (اختياري) لتسجيل اتجاه الأداةABS_MT_DISTANCE
: (اختياري) يُبلغ هذا الحقل عن مسافة الأداة من سطح الجهاز الذي يعمل باللمس.ABS_MT_TOOL_TYPE
: (اختياري) يُبلغ عن نوع الأداة باسمMT_TOOL_FINGER
أوMT_TOOL_PEN
ABS_MT_TRACKING_ID
: (اختياري) يُستخدَم لتسجيل رقم تعريف التتبُّع الخاص بالأداة. رقم تعريف التتبُّع هو عدد صحيح عشوائي غير سالب يُستخدَم لتحديد وتتبع كل أداة على حدة عند تفعيل عدة أدوات. على سبيل المثال، عند لمس عدة أصابع للجهاز، يجب تخصيص معرّف تتبُّع مختلف لكل إصبع يتم استخدامه ما دام الإصبع لا يزال على الجهاز. أرقام تعريف التتبُّع ويمكن إعادة استخدامه عندما تخرج الأدوات المرتبطة بها عن النطاق.-
ABS_MT_SLOT
: (اختياري) للإبلاغ عن رقم تعريف الفتحة الخاصة بالأداة، عند استخدام بروتوكول اللمس المتعدّد في Linux "B" يُرجى الرجوع إلى مستندات بروتوكول اللمس المتعدّد في Linux للحصول على مزيد من التفاصيل. -
BTN_TOUCH
: (سمة مطلوبة) تشير إلى ما إذا كانت الأداة تلامس الجهاز. - "
BTN_LEFT
" و"BTN_RIGHT
" و"BTN_MIDDLE
" و"BTN_BACK
"BTN_SIDE
،BTN_FORWARD
،BTN_EXTRA
،BTN_STYLUS
،BTN_STYLUS2
: (اختياري) حالات زر التقارير. BTN_TOOL_FINGER
،BTN_TOOL_PEN
،BTN_TOOL_RUBBER
،BTN_TOOL_BRUSH
,BTN_TOOL_PENCIL
،BTN_TOOL_AIRBRUSH
،BTN_TOOL_MOUSE
،BTN_TOOL_LENS
,BTN_TOOL_DOUBLETAP
،BTN_TOOL_TRIPLETAP
،BTN_TOOL_QUADTAP
: (اختياري) يُبلغ عن نوع الأداة.
-
- إذا تم تحديد محاور لكل من بروتوكول اللمس الواحد وبروتوكول اللمس المتعدد، فعندئذ أن يتم استخدام محاور اللمس المتعدد فقط ويتم تجاهل محاور اللمسة الواحدة.
تحدّد القيم الدنيا والقصوى لمحاور
ABS_X
وABS_Y
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
حدود المنطقة النشطة للجهاز في وحدات المساحة الخاصة بالجهاز. في حالة الشاشة التي تعمل باللمس، فإن المنطقة النشطة يصف الجزء الذي يغطي الشاشة فعلاً من الجهاز الذي يعمل باللمس.بالنسبة إلى الشاشة التي تعمل باللمس، يُجري النظام تلقائيًا عملية تقريب لمواضع اللمس التي تم الإبلاغ عنها في وحدات السطح للحصول على مواضع اللمس في وحدات بكسل الشاشة وفقًا للحساب التالي:
displayX = (x - minX) * displayWidth / (maxX - minX + 1) displayY = (y - minY) * displayHeight / (maxY - minY + 1)
قد تُبلِغ شاشة تعمل باللمس عن اللمسات خارج المنطقة النشطة التي تم الإبلاغ عنها.
لا يتم تسليم التطبيقات التي تعمل باللمس خارج المنطقة النشطة. ولكن يمكن استخدامها للمفاتيح الافتراضية.
يتم إرسال اللمسات التي تبدأ داخل المنطقة النشطة أو التي تدخل إلى منطقة الشاشة وتخرج منها إلى التطبيقات. نتيجةً لذلك، إذا بدأت لمسة داخل حدود تطبيق ثم انتقلت خارج المنطقة النشطة، قد يتلقّى التطبيق أحداث لمسة لها إحداثيات عرض سالبة أو خارج حدود شاشة العرض. وهذا سلوك متوقَّع.
يجب ألا يحصر جهاز اللمس أبدًا إحداثيات اللمس في حدود المنطقة النشطة. إذا خرجت اللمسة من المنطقة النشطة، يجب الإبلاغ عن أنّها خارج المنطقة النشطة، أو عدم الإبلاغ عنها على الإطلاق.
على سبيل المثال، إذا كان لمس إصبع المستخدم بالقرب من الزاوية العلوية اليسرى من التي تعمل باللمس، فقد تبلغ عن إحداثي (minX، minY). إذا استمرّ إصبعك للتحرك بعيدًا عن المنطقة النشطة، يجب أن تبدأ الشاشة التي تعمل باللمس إحداثيات التقارير بمكونات أقل من minX وminY، مثل (minX - 2, minY - 3) أو يجب أن يتوقف الإبلاغ عن اللمس تمامًا. بعبارة أخرى، يجب عدم تسجيل الشاشة التي تعمل باللمس للقيم (minX وminY) عندما يكون إصبع المستخدم يلامس خارج المنطقة النشطة.
يؤدي تثبيت إحداثيات اللمس بحافة الشاشة إلى إنشاء صورة هي حدود صلبة حول حافة الشاشة تمنع النظام من تتبع الحركات التي تدخل أو تخرج من حدود منطقة العرض بسلاسة.
القيم التي تم الإبلاغ عنها من خلال
ABS_PRESSURE
أوABS_MT_PRESSURE
، إذا كانت يتم الإبلاغ عنها على الإطلاق، يجب أن تكون بقيمة غير صفرية عند لمس الأداة للجهاز. ويصفر في الحالات الأخرى للإشارة إلى أن الأداة تتحرك.إنّ إدراج معلومات الضغط اختياري، ولكننا ننصح به بشدة. يمكن للتطبيقات استخدام معلومات الضغط لتنفيذ رسومات حساسة للضغط والتأثيرات الأخرى.
القيم التي تم الإبلاغ عنها من خلال
ABS_TOOL_WIDTH
،ABS_MT_TOUCH_MAJOR
،ABS_MT_TOUCH_MINOR
أوABS_MT_WIDTH_MAJOR
أو يجب أن تكون قيمةABS_MT_WIDTH_MINOR
بقيمة غير صفرية عند استخدام الأداة لمس الجهاز وصفر خلاف ذلك، ولكن هذا ليس مطلوبًا. على سبيل المثال، قد يتمكّن الجهاز الذي يعمل باللمس من قياس حجم لمس الإصبع. جهات الاتصال ولكن ليس جهات الاتصال التي تعمل باللمس بقلم الشاشة.إنّ معلومات حجم إعداد التقارير اختيارية ولكن يُنصح باستخدامها بشدة. يمكن أن تستخدم التطبيقات معلومات الضغط لتنفيذ رسومات تناسب الحجم والتأثيرات الأخرى.
يجب أن تكون القيم التي تم الإبلاغ عنها من خلال
ABS_DISTANCE
أوABS_MT_DISTANCE
عندما تلمس الأداة الجهاز. يمكن أن تظل المسافة غير صفرية حتى عندما تكون الأداة على اتصال مباشر. تعتمد القيم الدقيقة المسجَّلة على الطريقة التي تقيس بها الأجهزة المسافة.إنّ الإبلاغ عن معلومات المسافة اختياري، ولكننا ننصح به لمستخدمي الأجهزة المزوّدة بقلم الشاشة.
يجب أن تكون القيم التي تم الإبلاغ عنها من خلال
ABS_TILT_X
وABS_TILT_Y
صفرًا. عندما تكون الأداة عمودية على الجهاز تشير الإمالة غير الصفرية إلى أن الأداة تتحرك بشكل مائل.يُفترض أنّه يتم تحديد زوايا الإمالة على طول محورَي X وY بالدرجات من العمودي. يتم تحديد نقطة المركز (عمودية تمامًا)
(max + min) / 2
لكل محور. القيم أصغر من النقطة المركزية تمثل الإمالة لأعلى أو إلى اليسار، وقيم أكبر من النقطة المركزية تمثل الإمالة إلى أسفل أو إلى اليمين.InputReader
تحوّل مكوّنات الميل X وY إلى زاوية ميل عمودية تتراوح بين 0 وPI / 2
راديان وزاوية اتجاه مستوٍ تتراوح بين-PI
وPI
راديان. يؤدّي هذا التمثيل إلى وصف للاتجاه متوافق مع ما يُستخدَم لوصف لمسات الإصبع.إنّ الإبلاغ عن معلومات الإمالة اختياري، ولكن يُنصَح به لأجهزة قلم الشاشة.
إذا تم الإبلاغ عن نوع الأداة من خلال
ABS_MT_TOOL_TYPE
، ستحل هذه الأداة محل أي أداة. نوع المعلومات التي تم الإبلاغ عنها بواسطةBTN_TOOL_*
. إذا لم تتوفر أي معلومات حول نوع الأداة على الإطلاق، يكون نوع الأداة الافتراضيMotionEvent.TOOL_TYPE_FINGER
يتم تحديد الأداة نشطة استنادًا إلى الشروط التالية:
عند استخدام بروتوكول اللمسة الواحدة، تكون الأداة نشطة إذا كان
BTN_TOUCH
أو أوBTN_TOOL_*
يساوي 1.يشير هذا الشرط إلى أنّه يجب أن يتضمّن
InputReader
بعضًا على الأقل من المعلومات عن طبيعة الأداة، سواء كانت تلامس سطحًا، أو نوع الأداة على الأقل. إذا لم تكن هناك معلومات متوفرة، يتم افتراض أن الأداة غير نشطة (خارج النطاق).- عند استخدام بروتوكول اللمس المتعدّد "أ"، تكون الأداة نشطة متى ما ظهرت في تقرير المزامنة الأخير. عندما تتوقف الأداة عن الظهور في لم تعد موجودة.
- عند استخدام بروتوكول اللمس المتعدّد "ب"، تكون الأداة نشطة ما دامت لديها خانة نشطة. وعند محو الفتحة، تتوقف الأداة عن التواجد.
- يتم تحديد أنّ الأداة معلّقة استنادًا إلى الشروط التالية:
- إذا كانت الأداة
BTN_TOOL_MOUSE
أوBTN_TOOL_LENS
، يتم عندها لا يتم تمريره، حتى إذا انطبق أي من الشروط التالية. - فإذا كانت الأداة نشطة وأبلغ السائق عن معلومات الضغط، وكان الضغط المبلغ عنه صفرًا، فإن الأداة تحوم.
- إذا كانت الأداة نشطة وكان برنامج التشغيل يتوافق مع رمز مفتاح
BTN_TOUCH
قيمةBTN_TOUCH
هي صفر، ثم تُمرِّر الأداة.
- إذا كانت الأداة
- يتوافق
InputReader
مع بروتوكول اللمس المتعدّد "أ" و"ب". السائقون الجدد يجب استخدام الحرف "B" ولكن يمكن أن ينجح أي منهما. اعتبارًا من الإصدار Android 4.0، قد يلزم تغيير برامج تشغيل الشاشات التي تعمل باللمس. ليتوافق مع مواصفات بروتوكول الإدخال في نظام التشغيل Linux.
قد تكون التغييرات التالية مطلوبة:
عندما تصبح إحدى الأدوات غير نشطة (يرفع الإصبع)، من المفترض أن يتوقف ظهورها في تقارير مزامنة اللمس المتعدّد اللاحقة. عندما تصبح جميع الأدوات غير نشطة (ترفع جميع الأصابع)، يجب أن يرسل برنامج التشغيل حزمة تقرير مزامنة فارغة، مثل
SYN_MT_REPORT
متبوعًا بـSYN_REPORT
.الإصدارات السابقة من Android متوقعة الأحداث التي سيتم الإبلاغ عنها من خلال إرسال قيمة الضغط 0. كان السلوك القديم غير متوافق مع مواصفات بروتوكول إدخال Linux ولم يعُد متاحًا.
يجب الإبلاغ عن معلومات الضغط الجسدي أو قوة الإشارة باستخدام
ABS_MT_PRESSURE
كانت الإصدارات السابقة من Android تسترجع معلومات الضغط من
ABS_MT_TOUCH_MAJOR
. كان السلوك القديم غير متوافق مع مواصفات بروتوكول الإدخال في نظام التشغيل Linux لم تعد متوافقة.- يجب الإبلاغ عن معلومات حجم اللمس باستخدام
ABS_MT_TOUCH_MAJOR
.كانت الإصدارات السابقة من Android تسترجع معلومات الحجم من
ABS_MT_TOOL_MAJOR
. كان السلوك القديم غير متوافق مع مواصفات بروتوكول إدخال Linux ولم يعُد متاحًا.
تشغيل الجهاز باللمس
في ما يلي ملخّص موجز عن تشغيل الجهاز الذي يعمل باللمس على Android.
- يقرأ
EventHub
الأحداث الأولية من برنامج تشغيلevdev
. - يستخدِم
InputReader
الأحداث الأوّلية ويُعدِّل الحالة الداخلية المتعلّقة بالموقع والخصائص الأخرى لكلّ أداة. كما أنه يتتبع حالات الأزرار. - في حال الضغط على مفتاح BACK أو FORWARD أو تحريره،
يُرسِل
InputReader
إشعارًا إلىInputDispatcher
بشأن الحدث الرئيسي. - يحدِّد
InputReader
ما إذا تم الضغط على مفتاح افتراضي. إذا كان الأمر كذلك، يُرسِل إشعارًا إلىInputDispatcher
بشأن الحدث الرئيسي. - تحدِّد
InputReader
ما إذا كانت اللمسة قد بدأت داخل حدود الشاشة. وفي هذه الحالة، يتم إرسال إشعار إلىInputDispatcher
بشأن حدث اللمس. - إذا لم تكن هناك أدوات لمس ولكن كانت هناك أداة تمرير واحدة على الأقل،
يتم إرسال إشعار من "
InputReader
" إلى "InputDispatcher
" بشأن حدث التمرير. - إذا كان نوع الجهاز الذي يعمل باللمس هو مؤشر، سينفِّذ
InputReader
المؤشر. اكتشاف الإيماءة، وتحريك المؤشر والبقع وفقًا لذلك وإرسال إشعارInputDispatcher
عن حدث المؤشر - يستخدم
InputDispatcher
WindowManagerPolicy
لتحديد ما إذا كان ينبغي إرسال الأحداث وما إذا كان يجب تنشيط الجهاز. بعد ذلك، توفّرInputDispatcher
الأحداث للتطبيقات المناسبة.
المس تهيئة الجهاز
يتم تحديد سلوك الجهاز الذي يعمل باللمس حسب محاور الجهاز وأزراره وخصائص الإدخال وإعدادات جهاز الإدخال وخريطة المفاتيح الافتراضية وتصميم المفاتيح.
ارجع إلى الأقسام التالية لمزيد من التفاصيل حول الملفات التي المشاركة في ضبط لوحة المفاتيح:
الخصائص
يعتمد النظام على العديد من خصائص إعدادات أجهزة الإدخال لضبطها. ومعايرة سلوك الجهاز الذي يعمل باللمس.
أحد أسباب ذلك هو أن برامج تشغيل الأجهزة التي تعمل باللمس تُبلغ غالبًا خصائص اللمسات باستخدام وحدات خاصة بالجهاز.
على سبيل المثال، تقيس العديد من الأجهزة التي تعمل باللمس مساحة الاتصال باللمس باستخدام مقياس داخلي خاص بالجهاز، مثل العدد الإجمالي لنقاط اتصال الاستشعار التي تم تنشيطها من خلال اللمس. لن تكون قيمة الحجم الأوّلي هذه مفيدة للتطبيقات لأنّها ستحتاج إلى معرفة الحجم المادي والخصائص الأخرى لعقد أدوات استشعار الأجهزة التي تعمل باللمس.
يستخدم النظام مَعلمات المعايرة المشفَّرة في ملفات إعدادات جهاز الإدخال لترميز القيم التي يبلِغ عنها جهاز التحكّم باللمس وتحويلها وجعلها عادية إلى تمثيل عادي أبسط يمكن للتطبيقات فهمه.
اصطلاحات التوثيق
لأغراض التوثيق، نستخدم الاصطلاحات التالية لوصف والقيم التي يستخدمها النظام أثناء عملية المعايرة.
قيم المحور الأولية
تشير التعبيرات التالية إلى القيم الأوّلية التي يبلِغ عنها برنامج تشغيل شاشة اللمس
كأحداث EV_ABS
.
raw.x
- قيمة محور
ABS_X
أوABS_MT_POSITION_X
raw.y
- قيمة محور
ABS_Y
أوABS_MT_POSITION_Y
raw.pressure
- قيمة محور
ABS_PRESSURE
أوABS_MT_PRESSURE
، أو 0 إذا لم تكن متاحة raw.touchMajor
- قيمة المحور
ABS_MT_TOUCH_MAJOR
أو 0 في حال عدم توفّره raw.touchMinor
- قيمة محور
ABS_MT_TOUCH_MINOR
أوraw.touchMajor
في حال عدم توفّره raw.toolMajor
- قيمة المحور
ABS_TOOL_WIDTH
أوABS_MT_WIDTH_MAJOR
أو 0 إذا غير متاحة. raw.toolMinor
- قيمة المحور
ABS_MT_WIDTH_MINOR
أوraw.toolMajor
إذا لم تكن المتاحة raw.orientation
- قيمة المحور
ABS_MT_ORIENTATION
أو 0 في حال عدم توفّره raw.distance
- قيمة المحور
ABS_DISTANCE
أوABS_MT_DISTANCE
أو 0 إذا غير متاحة. raw.tiltX
- قيمة محور
ABS_TILT_X
، أو 0 في حال عدم توفّرها raw.tiltY
- قيمة محور
ABS_TILT_Y
، أو 0 إذا لم تكن متاحة
نطاقات المحور الأوّلية
تشير التعبيرات التالية إلى حدود القيم الأولية. يتم الحصول عليها
من خلال استدعاء EVIOCGABS
ioctl لكل محور.
raw.*.min
- القيمة الصغرى الشاملة للمحور الأولي.
raw.*.max
- القيمة القصوى الشاملة للمحور الأولي.
raw.*.range
- يعادل
raw.*.max - raw.*.min
. raw.*.fuzz
- دقة المحور الأوّلي. على سبيل المثال، تشير القيمة fuzz = 1 إلى أنّ القيم دقيقة بوحدة واحدة +/-.
raw.width
- العرض الشامل لمنطقة اللمس، ما يعادل
raw.x.range + 1
. raw.height
- الارتفاع الشامل لمنطقة اللمس، أي ما يعادل
raw.y.range + 1
نطاقات النتائج
تشير التعبيرات التالية إلى خصائص نظام إحداثيات الإخراج. يستخدم النظام الاستقراء الخطي لترجمة معلومات موضع اللمس من وحدات السطح التي يستخدمها الجهاز الذي يعمل باللمس إلى وحدات الإخراج التي يتم إبلاغ التطبيقات بها، مثل وحدات بكسل الشاشة.
output.width
- عرض الإخراج بالنسبة إلى الشاشات التي تعمل باللمس (المرتبطة بشاشة)، هو
عرض الشاشة بوحدات البكسل. بالنسبة إلى لوحات اللمس (غير المرتبطة بشاشة)،
يساوي عرض الإخراج
raw.width
، ما يشير إلى عدم تنفيذ interpolation . output.height
- ارتفاع الناتج: بالنسبة إلى الشاشات التي تعمل باللمس (المرتبطة بشاشة)، هو
ارتفاع الشاشة بالبكسل. بالنسبة إلى الألواح التي تعمل باللمس (غير المرتبطة بشاشة)
ارتفاع الناتج يساوي
raw.height
، مما يشير إلى عدم وجود استقراء تنفيذها output.diag
- الطول القطري لنظام إحداثيات الإخراج، وهو يساوي
sqrt(output.width ^2 + output.height ^2)
.
الإعداد الأساسي
يستخدم أداة ربط الإدخال باللمس العديد من سمات الإعداد في ملف إعدادات جهاز الإدخال لتحديد قيم المعايرة. يوضّح الجدول التالي بعض سمات الضبط للأغراض العامة. يتم وصف جميع السمات الأخرى في الأقسام التالية، بالإضافة إلى الحقول التي يتم استخدامها لمعايرة هذه السمات.
touch.deviceType
التعريف: touch.deviceType
= touchScreen
|
touchPad
| pointer
| default
تحدِّد هذه السياسة نوع الجهاز الذي يعمل باللمس.
-
إذا كانت القيمة هي
touchScreen
، يعني ذلك أنّ الجهاز المزوّد بشاشة تعمل باللمس هو شاشة تعمل باللمس مرتبطة بشاشة عرض. -
إذا كانت القيمة
touchPad
، يعني هذا أنّ الجهاز الذي يعمل باللمس هو لوحة لمس غير مرتبطة به. مع شاشة عرض. -
إذا كانت القيمة
pointer
، يعني هذا أنّ الجهاز الذي يعمل باللمس هو لوحة لمس غير مرتبطة به. باستخدام شاشة عرض، وحركاته إيماءات المؤشر متعددة اللمس غير المباشرة: -
إذا كانت القيمة هي
default
، يرصد النظام تلقائيًا نوع الجهاز وفقًا لخوارزمية التصنيف.
يُرجى الرجوع إلى قسم التصنيف للاطّلاع على مزيد من التفاصيل. حول كيفية تأثير نوع الجهاز في سلوك الجهاز الذي يعمل باللمس.
في Android 3 والإصدارات الأقدم، كان يفترض أن جميع الأجهزة التي تعمل باللمس هي شاشات تعمل باللمس.
touch.orientationAware
التعريف: touch.orientationAware
= 0
| 1
تحدِّد هذه السياسة ما إذا كان يجب أن يتفاعل الجهاز الذي يعمل باللمس مع تغييرات اتجاه العرض.
-
إذا كانت القيمة هي
1
، سيتم تدوير مواضع اللمس التي تم الإبلاغ عنها في الجهاز الذي يعمل باللمس. كلما تغير اتجاه العرض. -
إذا كانت القيمة
0
، يكون مناعة مواضع اللمس التي تم رصدها في الجهاز الذي يعمل باللمس لعرض تغييرات الاتجاه.
تكون القيمة التلقائية هي 1
إذا كان الجهاز مزوّدًا بشاشة تعمل باللمس، و0
في غير ذلك.
يميز النظام بين الشاشات اللمسية والشاشات الداخلية والخارجية. يتم تدوير الشاشة الداخلية التي تعمل باللمس والتي تتجاهل الاتجاه استنادًا إلى اتجاه الشاشة الداخلية. يتم تدوير شاشة لمس خارجية تتضمّن ميزة التعرّف على الاتجاه استنادًا إلى اتجاه الشاشة الخارجية.
يتم استخدام معرفة الاتجاه لدعم تدوير الشاشات التي تعمل باللمس على الأجهزة مثل Nexus One. على سبيل المثال، عند تدوير الجهاز باتجاه عقارب الساعة بمقدار 90 درجة عن اتجاهه الطبيعي، تتم إعادة ربط المواضع المطلقة للمسات بحيث تتم تسجيل لمسة في أعلى يمين نظام الإحداثيات المطلق لشاشة اللمس كلمسة في أعلى يمين نظام الإحداثيات المُدار للشاشة. ويتم ذلك حتى يتم تسجيل اللمسات باستخدام نظام التنسيق نفسه الذي تستخدمه التطبيقات لرسم عناصرها المرئية.
قبل Honeycomb، كان يُفترض أن تكون جميع الأجهزة التي تعمل باللمس مدركة للاتجاه.
وضع Touch.gestureMode
التعريف: touch.gestureMode
= pointer
| spots
|
default
تُحدِّد وضع العرض لحركات المؤشر. لا تكون سمة الضبط هذه ملائمة إلا عندما يكون الجهاز الذي يعمل باللمس من النوع مؤشر.
-
إذا كانت القيمة هي
pointer
، يتم عرض إيماءات لوحة اللمس من خلال مؤشر مشابه لمؤشر الماوس. -
إذا كانت القيمة هي
spots
، يتم عرض إيماءات لوحة اللمس من خلال عنصر تثبيت يمثّل مركز إيماءة ومجموعة من النقاط الدائرية التي تمثّل موضع الأصابع الفردية.
تكون القيمة التلقائية هي pointer
عند ضبط الخاصية inputINPUT_PROP_SEMI_MT
، أو spots
بخلاف ذلك.
حقلَا X وY
يوفّر حقلَا X وY معلومات حول موضع مركز منطقة الاتصال.
العملية الحسابية
عملية الحساب بسيطة: يتم تعديل المعلومات المتعلّقة بالموقع من برنامج تشغيل اللمس بشكل خطي إلى نظام إحداثيات الإخراج.
xScale = output.width / raw.width yScale = output.height / raw.height If not orientation aware or screen rotation is 0 degrees: output.x = (raw.x - raw.x.min) * xScale output.y = (raw.y - raw.y.min) * yScale Else If rotation is 90 degrees: output.x = (raw.y - raw.y.min) * yScale output.y = (raw.x.max - raw.x) * xScale Else If rotation is 180 degrees: output.x = (raw.x.max - raw.x) * xScale output.y = (raw.y.max - raw.y) * yScale Else If rotation is 270 degrees: output.x = (raw.y.max - raw.y) * yScale output.y = (raw.x - raw.x.min) * xScale End If
حقول touchMajor وtouchMinor وtoolMajor وtoolMinor وsize
يصف الحقلان touchMajor
وtouchMinor
السمتَين التقريبيتَين.
من منطقة الاتصال بوحدات الإخراج (بالبكسل).
يصف الحقلان toolMajor
وtoolMinor
السمتَين التقريبيتَين
لـ الأداة نفسها بوحدات الإخراج (البكسل).
يصف الحقل size
الحجم المنسَّق للمسّ مقارنةً
بأكبر لمسة ممكنة يمكن للجهاز الذي يتضمّن شاشة تعمل باللمس رصدها. الأصغر
يكون الحجم الطبيعي المحتمل 0.0 (بدون اتصال أو أنه غير قابل للقياس)، والأكبر
الحجم المحتمل الذي يمكن تسويته هو 1.0 (منطقة أداة الاستشعار مشبّعة).
وعندما يمكن قياس كل من الطول والعرض التقريبيين، فإن
حقل واحد (touchMajor
)
يحدد البُعد الأطول، ويحدّد الحقل touchMinor
البُعد الأقصر
في منطقة الاتصال. عندما يمكن قياس القطر التقريبي لمنطقة التلامس فقط،
يكون حقلَا touchMajor
وtouchMinor
متساويين.
وبالمثل، يحدّد الحقل toolMajor
السمة الأطول ويحدّد الحقل
toolMinor
السمة الأقصر لمساحة المقطع العرضي للأداة.
إذا لم يكن حجم اللمس متاحًا ولكن كان حجم الأداة متاحًا، يتم ضبط حجم الأداة على أنّه يساوي حجم اللمس. في المقابل، إذا لم يكن حجم الأداة متاحًا ولكن كان حجم اللمس متاحًا، يتم ضبط حجم اللمس على أنّه يساوي حجم الأداة.
تقيس أجهزة اللمس أو تُبلغ عن حجم اللمس وحجم الأداة بطرق مختلفة. يتيح الإصدار الحالي ثلاثة أنواع مختلفة من القياسات: القطر والمساحة والحدود الهندسية للإطار في وحدات المساحة.
التعريف: touch.size.calibration
= none
|
geometric
| diameter
| area
| default
تحدِّد هذه السياسة نوع القياس الذي يستخدمه برنامج التشغيل الذي يعمل باللمس للإبلاغ عن حجم اللمس وحجم الأداة.
-
إذا كانت القيمة هي
none
، سيتم ضبط الحجم على صفر. -
إذا كانت القيمة هي
geometric
، سيُفترض تحديد المقاس بالقيمة نفسها أي وحدات السطحية مثل الموضع، بحيث يتم قياسها بنفس الطريقة. -
إذا كانت القيمة
diameter
، يتم افتراض أنّ الحجم يتناسب مع قطر (عرض) اللمس أو الأداة. -
إذا كانت القيمة هي
area
، يُفترض أن يكون الحجم متناسبًا مع مساحة اللمس أو الأداة. -
إذا كانت القيمة هي
default
، يستخدم النظام عملية معايرةgeometric
إذا كان محورraw.touchMajor
أوraw.toolMajor
متاحًا، وإلا سيستخدم عملية معايرةnone
.
touch.size.scale
التعريف: touch.size.scale
= <رقم النقطة العائمة غير السالب>
تحدّد هذه السمة عامل مقياس ثابت يُستخدَم في المعايرة.
القيمة التلقائية هي 1.0
.
touch.size.bias
التعريف: touch.size.bias
= <رقم نقطة عائمة غير سالب>
تحدّد قيمة انحياز ثابتة مستخدَمة في المعايرة.
تكون القيمة التلقائية 0.0
.
touch.size.isSummed
التعريف: touch.size.isSummed
= 0
| 1
تُستخدَم لتحديد ما إذا كان يتم تسجيل الحجم على أنّه مجموع أحجام كل جهات الاتصال النشطة، أو يتم تسجيله بشكلٍ فردي لكل جهة اتصال.
-
إذا كانت القيمة
1
، تتم قسمة الحجم الذي تم الإبلاغ عنه على الرقم. من جهات الاتصال قبل استخدامها. -
إذا كانت القيمة هي
0
، يتم استخدام الحجم الذي تم الإبلاغ عنه كما هو.
القيمة التلقائية هي 0
.
لا يمكن لبعض الأجهزة التي تعمل باللمس، لا سيما الأجهزة "Semi-MT"، التمييز بين سمات جهات الاتصال المتعدّدة الفردية، لذا يتم تسجيل قياس حجم يمثّل المساحة أو العرض الإجمالي. يجب ضبط هذه السمة على
1
لهذه الأجهزة فقط. إذا لم تكن متأكّدًا، اضبط هذه القيمة على 0
.
العملية الحسابية
يعتمد حساب الحقول touchMajor
وtouchMinor
وtoolMajor
toolMinor
وsize
على مَعلمات المعايرة المحدّدة.
If raw.touchMajor and raw.toolMajor are available: touchMajor = raw.touchMajor touchMinor = raw.touchMinor toolMajor = raw.toolMajor toolMinor = raw.toolMinor Else If raw.touchMajor is available: toolMajor = touchMajor = raw.touchMajor toolMinor = touchMinor = raw.touchMinor Else If raw.toolMajor is available: touchMajor = toolMajor = raw.toolMajor touchMinor = toolMinor = raw.toolMinor Else touchMajor = toolMajor = 0 touchMinor = toolMinor = 0 size = 0 End If size = avg(touchMajor, touchMinor) If touch.size.isSummed == 1: touchMajor = touchMajor / numberOfActiveContacts touchMinor = touchMinor / numberOfActiveContacts toolMajor = toolMajor / numberOfActiveContacts toolMinor = toolMinor / numberOfActiveContacts size = size / numberOfActiveContacts End If If touch.size.calibration == "none": touchMajor = toolMajor = 0 touchMinor = toolMinor = 0 size = 0 Else If touch.size.calibration == "geometric": outputScale = average(output.width / raw.width, output.height / raw.height) touchMajor = touchMajor * outputScale touchMinor = touchMinor * outputScale toolMajor = toolMajor * outputScale toolMinor = toolMinor * outputScale Else If touch.size.calibration == "area": touchMajor = sqrt(touchMajor) touchMinor = touchMajor toolMajor = sqrt(toolMajor) toolMinor = toolMajor Else If touch.size.calibration == "diameter": touchMinor = touchMajor toolMinor = toolMajor End If If touchMajor != 0: output.touchMajor = touchMajor * touch.size.scale + touch.size.bias Else output.touchMajor = 0 End If If touchMinor != 0: output.touchMinor = touchMinor * touch.size.scale + touch.size.bias Else output.touchMinor = 0 End If If toolMajor != 0: output.toolMajor = toolMajor * touch.size.scale + touch.size.bias Else output.toolMajor = 0 End If If toolMinor != 0: output.toolMinor = toolMinor * touch.size.scale + touch.size.bias Else output.toolMinor = 0 End If output.size = size
حقل الضغط
يصف الحقل pressure
الضغط المادي التقريبي الذي يتم تطبيقه على
جهاز يعمل باللمس كقيمة تمت تسويتها تتراوح بين 0.0 (بدون لمس) و1.0 (الضغط العادي).
يشير الضغط صفر إلى أن الأداة تتحرك.
touch.pressure.calibration
التعريف: touch.pressure.calibration
= none
|
physical
| amplitude
| default
تحدِّد نوع القياس الذي يستخدمه برنامج تشغيل اللمس للإبلاغ عن الضغط.
-
إذا كانت القيمة هي
none
، يكون الضغط غير معروف، لذا يتم ضبطه على 1.0 عند اللمس و0.0 عند التمرير. -
إذا كانت القيمة هي
physical
، يُفترض أن يقيس محور الضغط كثافة القصوى للضغط المُطبَّق على لوحة اللمس. -
إذا كانت القيمة هي
amplitude
، يُفترض أن يقيس محور الضغط إشارة سعة الإشارة، والتي ترتبط بحجم جهة الاتصال والضغط المُطبَّق. -
إذا كانت القيمة هي
default
، يستخدم النظام معايرة "physical
" إذا كانت محور الضغط متاح، وإلا سيستخدمnone
.
touch.pressure.scale
التعريف: touch.pressure.scale
= <رقم النقطة العائمة غير السالب>
تُحدِّد عامل قياس ثابتًا مستخدَمًا في المعايرة.
القيمة التلقائية هي 1.0 / raw.pressure.max
.
العملية الحسابية
تعتمد عملية احتساب حقل pressure
على مَعلمات المعايرة المحدّدة.
If touch.pressure.calibration == "physical" or "amplitude": output.pressure = raw.pressure * touch.pressure.scale Else If hovering: output.pressure = 0 Else output.pressure = 1 End If End If
حقلَا الاتجاه والإمالة
يصف الحقل orientation
اتجاه اللمسة والأداة على هيئة قياس
زاوي. يشير الاتجاه 0
إلى أنّ المحور الرئيسي
موجَّه عموديًا، ويشير -PI/2
إلى أنّ المحور الرئيسي موجَّه إلى اليسار، ويشيرPI/2
إلى أنّ المحور الرئيسي موجَّه إلى اليمين. عندما يستخدم قلم الشاشة
الأخرى، يمكن وصف نطاق الاتجاه في نطاق دائرة كاملة
من -PI
أو PI
.
يصف الحقل tilt
ميل الأداة كقياس زاوٍ.
يشير إمالة الأداة 0
إلى أنّ الأداة عمودية على السطح.
يشير إمالة الأداة PI/2
إلى أنّ الأداة مسطّحة على السطح.
touch.orientation.calibration
التعريف: touch.orientation.calibration
= none
|
interpolated
| vector
| default
لتحديد نوع القياس المستخدَم من قِبل برنامج تشغيل اللمس للإبلاغ عن الاتجاه
- إذا كانت القيمة هي
none
، يكون الاتجاه غير معروف، لذا يتم ضبطه على 0. - إذا كانت القيمة هي
interpolated
، يتمّ الاستقراء الخطي للاتجاه بحيث يتمّ ربط القيمة الأوّليةraw.orientation.min
بقيمة-PI/2
ويتمّ ربط القيمة الأوّليةraw.orientation.max
بقيمةPI/2
. يتم ربط القيمة المركزية لمحاولة الربط التالية:(raw.orientation.min + raw.orientation.max) / 2
بـ0
. - وإذا كانت القيمة هي
vector
، يتم تفسير الاتجاه على أنّه متّجه معبأ من حقلين موقّعين 4 بت. يُستخدَم هذا التمثيل في أجزاء بروتوكول Atmel المستنِد إلى الكائنات . وعند فك ترميزه، ينتج عن الخط المتجه زاوية اتجاه ومدى ثقة المقدار. ويتم استخدام مقدار الثقة لقياس معلومات الحجم، ما لم يكن شكلاً هندسيًا. - إذا كانت القيمة هي
default
، سيستخدم النظام معايرة "interpolated
". إذا كان محور الاتجاه متاحًا، وإلا فسيتم استخدامnone
.
العملية الحسابية
يعتمد احتساب الحقلَين orientation
وtilt
على
مَعلمات المعايرة المحدّدة والمدخلات المتاحة.
If touch.tiltX and touch.tiltY are available: tiltXCenter = average(raw.tiltX.min, raw.tiltX.max) tiltYCenter = average(raw.tiltY.min, raw.tiltY.max) tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180 tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180 output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle)) output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle)) Else If touch.orientation.calibration == "interpolated": center = average(raw.orientation.min, raw.orientation.max) output.orientation = PI / (raw.orientation.max - raw.orientation.min) output.tilt = 0 Else If touch.orientation.calibration == "vector": c1 = (raw.orientation & 0xF0) >> 4 c2 = raw.orientation & 0x0F If c1 != 0 or c2 != 0: If c1 >= 8 Then c1 = c1 - 16 If c2 >= 8 Then c2 = c2 - 16 angle = atan2(c1, c2) / 2 confidence = sqrt(c1*c1 + c2*c2) output.orientation = angle If touch.size.calibration == "diameter" or "area": scale = 1.0 + confidence / 16 output.touchMajor *= scale output.touchMinor /= scale output.toolMajor *= scale output.toolMinor /= scale End If Else output.orientation = 0 End If output.tilt = 0 Else output.orientation = 0 output.tilt = 0 End If If orientation aware: If screen rotation is 90 degrees: output.orientation = output.orientation - PI / 2 Else If screen rotation is 270 degrees: output.orientation = output.orientation + PI / 2 End If End If
حقل المسافة
يصف حقل distance
المسافة بين الأداة وسطح
الجهاز الذي يعمل باللمس. تشير القيمة 0.0 إلى الاتصال المباشر وتشير القيم الأكبر إلى
المسافة المتزايدة من السطح.
touch.distance.المعايرة
التعريف: touch.distance.calibration
= none
|
scaled
| default
لتحديد نوع القياس المستخدَم من قِبل برنامج تشغيل اللمس للإبلاغ عن المسافة
-
إذا كانت القيمة هي
none
، تكون المسافة غير معروفة، لذا يتم ضبطها على 0. -
إذا كانت القيمة هي
scaled
، يتم ضرب المسافة المبلّغ عنها في عامل القياس الثابت. -
إذا كانت القيمة هي
default
، يستخدم النظام عملية المعايرةscaled
إذا كان محور المسافة متاحًا، وإلا يستخدمnone
.
touch.distance.scale
التعريف: touch.distance.scale
= <رقم نقطة عائمة غير سالب>
تحدّد هذه السمة عامل مقياس ثابت يُستخدَم في المعايرة.
القيمة التلقائية هي 1.0
.
العملية الحسابية
تعتمد عملية احتساب حقل distance
على المعايرة المحدّدة.
المعلَمات.
If touch.distance.calibration == "scaled": output.distance = raw.distance * touch.distance.scale Else output.distance = 0 End If
مثال
# Input device configuration file for a touch screen that supports pressure, # size and orientation. The pressure and size scale factors were obtained # by measuring the characteristics of the device itself and deriving # useful approximations based on the resolution of the touch sensor and the # display. # # Note that these parameters are specific to a particular device model. # Different parameters need to be used for other devices. # Basic Parameters touch.deviceType = touchScreen touch.orientationAware = 1 # Size # Based on empirical measurements, we estimate the size of the contact # using size = sqrt(area) * 28 + 0. touch.size.calibration = area touch.size.scale = 28 touch.size.bias = 0 touch.size.isSummed = 0 # Pressure # Driver reports signal strength as pressure. # # A normal index finger touch typically registers about 80 signal strength # units although we don't expect these values to be accurate. touch.pressure.calibration = amplitude touch.pressure.scale = 0.0125 # Orientation touch.orientation.calibration = vector
ملاحظات حول التوافق
تغيّرت خصائص الضبط للأجهزة التي تعمل باللمس بشكل كبير في Android Ice Cream Sandwich 4.0. جميع ملفات إعداد جهاز الإدخال للعمل باللمس يجب تحديث الأجهزة لاستخدام خصائص الضبط الجديدة.
قد تحتاج أيضًا إلى تحديث برامج تشغيل الأجهزة القديمة التي تعمل باللمس.
ملفات خريطة المفاتيح الافتراضية
يمكن استخدام الأجهزة التي تعمل باللمس لتنفيذ مفاتيح افتراضية.
هناك عدة طرق لإجراء ذلك، استنادًا إلى إمكانات جهاز التحكّم باللمس. يمكن ضبط بعض وحدات التحكّم التي تعمل باللمس مباشرةً لتنفيذها المفاتيح الأساسية من خلال ضبط سجلات البرامج الثابتة. في أوقات أخرى يكون من المستحسن تنفيذ التعيين من إحداثيات اللمس إلى الرموز الرئيسية في البرنامج.
عند تنفيذ المفاتيح الافتراضية في البرامج، يجب أن تُصدِّر النواة ملف virtualkeys.<devicename>
الذي يُسمّى "خريطة مفاتيح افتراضية" كخاصية للوحة. على سبيل المثال:
إذا كانت برامج تشغيل الأجهزة ذات الشاشات التي تعمل باللمس أشارت إلى أنّ اسمها هو "Touchyfeely" ثم
يجب أن يحتوي ملف خريطة المفتاح الافتراضي على المسار
/sys/board_properties/virtualkeys.touchyfeely
يصف ملف خريطة المفاتيح الافتراضية الإحداثيات ورموز مفاتيح Linux للمفاتيح الافتراضية على الشاشة اللمسية.
بالإضافة إلى ملف تعيين المفاتيح الافتراضية، يجب أن يتوفّر ملف تنسيق مفاتيح
مطابق وملف تعيين أحرف المفاتيح لتعيين رموز مفاتيح Linux إلى رموز مفاتيح Android
وتحديد نوع جهاز لوحة المفاتيح (عادةً SPECIAL_FUNCTION
).
بناء الجملة
ملف خريطة المفتاح الافتراضي هو ملف نص عادي يتكون من سلسلة من المفاتيح الافتراضية أوصاف التخطيط إما مفصولة بسطور جديدة أو نقطتين.
تبدأ أسطر التعليق بعلامة الهاشتاغ (#) وتستمر إلى نهاية السطر.
يتم وصف كل مفتاح افتراضي من خلال 6 مكوّنات مُحدَّدة بنقطتَين:
0x01
: رمز إصدار يجب أن تكون القيمة دائمًا0x01
.- <Linux key code>: رمز مفتاح Linux للمفتاح الافتراضي
- <centerX>: الإحداثي السيني (X) لبكسل مركز المفتاح الافتراضي
- <centerY>: الإحداثي الصادي (Y) لوحدة البكسل في منتصف المفتاح الافتراضي
- <width>: عرض المفتاح الافتراضي بالبكسل
- <height>: ارتفاع المفتاح الافتراضي بالبكسل
يتم تحديد جميع الإحداثيات والأحجام من حيث نظام إحداثيات العرض.
في ما يلي ملف خريطة مفاتيح افتراضية مكتوبة بالكامل في سطر واحد.
# All on one line 0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55
يمكن أيضًا كتابة ملف خريطة المفاتيح الافتراضية نفسه على أسطر متعددة.
# One key per line 0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
في المثال أعلاه، تبلغ دقة الشاشة التي تعمل باللمس 480×800. وفقًا لذلك، المفاتيح الافتراضية تحتوي على <centerY> الإحداثي 835، وهو أقلّ بقليل المنطقة المرئية من الشاشة التي تعمل باللمس.
يتضمن المفتاح الأول رمز مسح ضوئي لنظام التشغيل Linux بقيمة 158
(KEY_BACK
)، في منتصف س من
55
، في الوسط Y من 835
، وعرض 90
، وارتفاع
55
مثال
ملف خريطة المفتاح الافتراضي: /sys/board_properties/virtualkeys.touchyfeely
0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
ملف تنسيق المفاتيح: /system/usr/keylayout/touchyfeely.kl
.
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
ملف خريطة الرموز الرئيسية: /system/usr/keychars/touchyfeely.kcm
type SPECIAL_FUNCTION
إيماءات المؤشر غير المباشرة ذات اللمس المتعدد
في وضع المؤشر، يفسر النظام الإيماءات التالية:
- النقر بإصبع واحد: انقر.
- الحركة بإصبع واحد: حرِّك المؤشر.
- حركة إصبع واحد مع الضغط على الزر: اسحب المؤشر.
- حركة إصبعين يتحركان في الاتجاه نفسه: اسحب المنطقة تحت المؤشر في هذا الاتجاه. لا يتحرك المؤشر نفسه.
- حركة إصبعين: تحريك الإصبعين باتجاه بعضهما أو بشكلٍ منفصل في اتجاهات مختلفة: تمرير/تكبير/تصغير المنطقة المحيطة المؤشر المؤشر نفسه لا يتحرك.
- حركة الأصابع المتعددة: إيماءة الشكل الحر.
راحة اليد
اعتبارًا من Android 13، يمكن للنظام رفض البيانات الواردة من راحة يد تلقائيًا
عند تفعيل إطار العمل المضمَّن. لا تزال الحلول المخصّصة التي يتم إنشاؤها داخل المؤسسة متاحة،
إلا أنّه قد يلزم تعديلها لعرض العلامة TOOL_TYPE_PALM
عند رصد راحة يد
في الإطار. يعمل إطار العمل المدمج أيضًا مع الحلول المخصصة.
ينظر النموذج الفعلي إلى أول 90 ملي ثانية من بيانات الإيماءات، عند المؤشر الحالي،
المؤشرات المحيطة، ثم يأخذ في الاعتبار مدى بُعد اللمسات عن حافة الشاشة.
ثم تحدد، لكل نقطة، المؤشر الذي يمثل راحة يد. يأخذ ذلك أيضًا في
حساب حجم كل جهة اتصال، على النحو الذي تم الإبلاغ عنه بواسطة touchMajor
touchMinor
بعد ذلك، يزيل إطار عمل Android المؤشرات التي تم وضع علامة عليها باعتبارها
كفوفًا من بث اللمس.
إذا تم إرسال المؤشر إلى التطبيقات من قبل، سيُحدث النظام أيًا مما يلي:
- (إذا كانت هناك مؤشرات نشطة أخرى) يلغي المؤشر باستخدام
ACTION_POINTER_UP
وFLAG_CANCELED
. - (إذا كان هذا هو المؤشر الوحيد) تلغي المؤشر باستخدام
ACTION_CANCEL
.
تشير واجهة برمجة التطبيقات العامة، MotionEvent.FLAG_CANCELED
، إلى أنّه يجب عدم بدء الحدث الحالي
من خلال إجراء من المستخدم. تم ضبط هذه العلامة لكل من ACTION_CANCEL
وACTION_POINTER_UP
.
إذا لم يتم إرسال مؤشر راحة اليد إلى التطبيقات، سيُسقط النظام المؤشر ببساطة.
تفعيل ميزة "رفض راحة اليد"
- في برنامج تشغيل الشاشة التي تعمل باللمس، استخدِم
input_abs_set_res
الماكرو لضبط درجات الدقة للحقول التالية (الوحدات هي بكسل لكل مم):ABS_MT_POSITION_X
ABS_MT_POSITION_Y
ABS_MT_TOUCH_MAJOR
ABS_MT_TOUCH_MINOR
إنّ الحصول على الدعم لـ
ABS_MT_TOUCH_MINOR
اختياري. ومع ذلك، إذا كان جهازك التي تدعمها، فتأكد من تعيين درجة الدقة بشكل صحيح. - للتأكّد من ضبط الحقول بشكل صحيح، شغِّل:
$ adb shell getevent -li
- لتفعيل الميزة أثناء وقت التشغيل، يمكنك تنفيذ ما يلي:
$ adb shell device_config put input_native_boot palm_rejection_enabled 1
- أعِد بدء عملية
system_server
.$ adb shell stop && adb shell start
- تأكَّد من أنّ
adb shell dumpsys input
يعرض أنّ هناك أجهزة لرفض راحة اليد داخلUnwantedInteractionBlocker
. إذا لم يحدث ذلك، تحقق من السجلات المتعلقة بالإدخال للعثور على مفاتيح حول ما قد يتم بشكل خاطئ.انظر المثال التالي كمرجع:
UnwantedInteractionBlocker: mEnablePalmRejection: true isPalmRejectionEnabled (flag value): true mPalmRejectors: deviceId = 3: mDeviceInfo: max_x =
max_y = x_res = 11.00 y_res = 11.00 major_radius_res = 1.00 minor_radius_res = 1.00 minor_radius_supported = true touch_major_res = 1 touch_minor_res = 1 mSlotState: mSlotsByPointerId: mPointerIdsBySlot: mSuppressedPointerIds: {} - لتفعيل هذه الميزة بشكل دائم، أضِف أمر sysrep المقابل في ملف
init**rc
الملف:setprop persist.device_config.input_native_boot.palm_rejection_enabled 1