يتوافق Android مع مجموعة متنوعة من الشاشات التي تعمل باللمس ولوحات اللمس، بما في ذلك: الأجهزة اللوحية المزوّدة بقلم الشاشة الرقمية.
الشاشات التي تعمل باللمس هي أجهزة تعمل باللمس ومرتبطة بشاشة معيَّنة يكون لدى المستخدم انطباع بالتلاعب المباشر بالعناصر على الشاشة.
لوحات اللمس هي أجهزة تعمل باللمس غير مرتبطة بشاشة، مثل جهاز التحويل الرقمي. تُستخدم لوحات اللمس عادةً للتأشير أو الموضع المطلق غير المباشر أو التحكم المستند إلى الإيماءات لواجهة المستخدم.
يمكن أن تحتوي الأجهزة التي تعمل باللمس على أزرار تشبه وظائفها أزرار الماوس.
يمكن أحيانًا التلاعب بالأجهزة التي تعمل باللمس باستخدام مجموعة متنوّعة من الأدوات المختلفة. مثل الأصابع أو قلم الشاشة، اعتمادًا على تقنية أداة استشعار اللمس الأساسية.
وفي بعض الأحيان، يتم استخدام الأجهزة التي تعمل باللمس لتنفيذ المفاتيح الافتراضية. على سبيل المثال، في في بعض أجهزة Android، تمتد منطقة أداة استشعار الشاشة التي تعمل باللمس إلى ما وراء حافة الشاشة وتعمل بشكل مزدوج كجزء من لوحة مفاتيح حساسة للمس.
نظرًا للتنوع الكبير لأجهزة اللمس، يعتمد نظام Android على عدد كبير من خصائص الضبط لوصف الخصائص والسلوك المطلوب كل جهاز.
تصنيف الجهاز الذي يعمل باللمس
يتم تصنيف جهاز الإدخال كجهاز متعدد اللمس إذا كان تثبيت الشروط التالية:
- يشير جهاز الإدخال إلى توفُّر جهاز
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
محور مطلق. - لا يتضمّن جهاز الإدخال أي أزرار للوحة الألعاب. هذا الشرط تحل الغموض مع بعض وحدات الألعاب التي تشير إلى محاور باستخدام الرموز تتداخل مع محاور الترجمة الآلية.
يتم تصنيف جهاز الإدخال كجهاز يعمل بلمسة واحدة إذا كان تعليق الشروط التالية:
- جهاز الإدخال غير مصنَّف على أنّه جهاز يتيح اللمس المتعدّد. جهاز إدخال الجهاز الذي يعمل بلمسة واحدة أو جهاز يعمل باللمس المتعدّد، ولا كلاهما مطلقًا.
- يشير جهاز الإدخال إلى توفُّر قيمتَي
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
: (اختياري) يبلِّغ عن إمالة الأداة من سطح الجهاز الذي يعمل باللمس على طول المحور س.ABS_TILT_Y
: (اختياري) يبلِّغ عن إمالة الأداة من سطح جهاز اللمس على طول المحور ص.BTN_TOUCH
: يشير (REQUIRED) إلى ما إذا كانت الأداة تلمس الخاص بك.- "
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
: يشير (REQUIRED) إلى ما إذا كانت الأداة تلمس الخاص بك.- "
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
يحتاج على الأقل إلى بعض معلومات حول طبيعة الأداة، سواء كانت لمسها، أو على الأقل نوع الأداة. إذا لم تكن هناك معلومات متوفرة، يتم افتراض أن الأداة غير نشطة (خارج النطاق).- عند استخدام بروتوكول اللمس المتعدد "A"، تكون الأداة نشطة كلما تظهر في أحدث تقرير مزامنة. عندما تتوقف الأداة عن الظهور في لم تعد موجودة.
- عند استخدام بروتوكول اللمس المتعدد "ب"، تكون الأداة نشطة طالما يحتوي على خانة نشطة. وعند محو الخانة، تتوقف الأداة عن التواجد.
- يتم تحديد أداة يتم تمريرها استنادًا إلى الشروط التالية:
- إذا كانت الأداة
BTN_TOOL_MOUSE
أوBTN_TOOL_LENS
، يتم عندها لا يتم تمريره، حتى إذا انطبق أي من الشروط التالية. - فإذا كانت الأداة نشطة وأبلغ السائق عن معلومات الضغط، وكان الضغط المبلغ عنه صفرًا، فإن الأداة تحوم.
- إذا كانت الأداة نشطة وكان برنامج التشغيل يتوافق مع رمز مفتاح
BTN_TOUCH
قيمةBTN_TOUCH
هي صفر، ثم تُمرِّر الأداة.
- إذا كانت الأداة
- يتوافق "
InputReader
" مع بروتوكول اللمس المتعدد 'A'. و"B". السائقون الجدد يجب استخدام الحرف "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
الأحداث الأولية ويعدّل الحالة الداخلية حول مكان كل أداة وخصائصها الأخرى. كما أنه يتتبع حالات الأزرار. - في حال الضغط على زر رجوع أو إعادة التوجيه أو رفعه،
يُرسِل "
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
- دقة المحور الأولي مثلاً: يشير Fzzzz = 1 إلى أنّ القيم دقيقة لـ +/- 1 وحدة.
raw.width
- العرض الشامل لمساحة اللمس، ما يعادل
raw.x.range + 1
raw.height
- الارتفاع الشامل لمنطقة اللمس، أي ما يعادل
raw.y.range + 1
نطاقات الإخراج
تشير التعبيرات التالية إلى خصائص نظام إحداثيات الإخراج. يستخدم النظام الاستيفاء الخطي لترجمة معلومات موضع اللمس من وحدات السطح التي يستخدمها الجهاز الذي يعمل باللمس في وحدات الإخراج تقديم تقارير إلى التطبيقات مثل وحدات بكسل العرض.
output.width
- عرض الناتج: وبالنسبة إلى الشاشات التي تعمل باللمس (المرتبطة بشاشة)، فإن هذا
هو عرض العرض بالبكسل. بالنسبة إلى الألواح التي تعمل باللمس (غير المرتبطة بشاشة)
عرض الإخراج يساوي
raw.width
، مما يشير إلى عدم وجود استقراء تنفيذها. 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
عندما تكون خاصية الإدخال INPUT_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، أداةMinor، حقول الحجم
يصف الحقلان 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
.
بعض الأجهزة التي تعمل باللمس، خاصةً "شبه 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.معايرة
التعريف: 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.المعايرة
التعريف: 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 آيس كريم ساندويتش 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