مقدمه

در این پست قصد داریم آموزش مالتی تاچ Multitouch در اندروید را برای شما قرار دهیم. زمانی که صفحه‌ی نمایشگر لمسی یک دستگاه با بیش از یک انگشت لمس شود مولتی تاچ یا حالت چند لمسی اتفاق می‌افتد. دستگاه‌های اندروید توانایی تشخیص مالتی تاچ را دارند.

رویداد‌هایی که در multitouch اندروید رخ می‌دهند

زمانی که چند انگشت با هم صفحه‌ی نمایشگر را لمس کنند، اندروید این رویداد‌ها را انجام می‌دهد.

نام رویداد و توضیحات شماره‌ی رویداد
ACTION_DOWN

با اولین لمس فعال سازی می‌شود.

۱
ACTION_POINTER_DOWN

با دیگر لمس‌ها فعال سازی می‌شود.

۲
ACTION_MOVE

زمانی که تغییری در طول فشار دادن نمایشگر رخ می‌دهد فعال سازی می‌شود.

۳
ACTION_POINTER_UP

زمانی که یکی از لمس‌های ثانویه بالا می‌رود ارسال می‌شود.

۴
ACTION_UP

زمانی که آخرین لمس از صفحه خارج می‌شود ارسال می‌شود.

۵

 

بنابراین برای شناسایی هر کدام از رویداد‌های بالا باید روش ()onTouchEvent را کنار گذاشته و این رویداد‌ها را به طور دستی چک کنید. سینتکس آن در این جا قرار داده شده است:

 

public boolean onTouchEvent(MotionEvent ev){

   final int actionPeformed = ev.getAction();



   switch(actionPeformed){

      case MotionEvent.ACTION_DOWN:{

         break;

      }

  

      case MotionEvent.ACTION_MOVE:{

         break;

      }

      return true;

   }

}

در این مورد، می‌توانید هر عملی که بخواهید را در مالتی تاچ اندروید انجام دهید. به عنوان مثال، می توانید تصویر را زوم کنید، آن را کوچک کنید و غیره. برای به دست آوردن مختصات محورهای X و Y، می‌توانید از روش فراخوانی ()getX و ()getY استفاده کنید. سینتکس آن در این جا آورده شده است:

 

final float x = ev.getX();

final float y = ev.getY();

روش‌های کارکردن با multi touch اندروید

علاوه بر این روش‌ها، روش‌های دیگری نیز برای کارکردن بهتر با مولتی تاچ اندروید وجود دارند. این روش‌ها عبارت اند از:

نام روش و توضیحات شماره‌ی روش
()getAction

این روش عملی که در حال انجام بوده است را برمی‌گرداند.

۱
()getPressire

این روش فشار فعلی این رویداد را برای اولین ایندکس برمی‌گرداند.

۲
()getRawY

این روش ردیف مختصات Y اصلی این رویداد را برمی‌گرداند.

۳
()getSize

این روش اندازه‌ی اولین ایندکس لمس را برمی‌گرداند.

۴
()getSource

این روش منبع رویداد را برمی‌گرداند.

۵
()getXPrecision

این روش دقت مختصات X گزارش شده را برمی‌گرداند.

۶
()getYPrecision

این روش دقت مختصات Y گزارش شده را برمیگرداند.

۷

 

آموزش multi touch اندروید: مثال عملی

آموزش multi touch اندروید را با یک مثال عملی ادامه می‌دهیم. در این مثال یک برنامه‌ی مولتی تاچ ساده که با استفاده از آن می‌توانید مختصات محل لمس شدن در روی صفحه ی نمایشگر را ببینید را می سازیم.

برای ساخت اپلیکیشن این مراحل را انجام دهید:

توضیحات مراحل
برای ساخت یک اپلیکیشن اندروید تحت پکیج com.example.sairamkrishna.myapplication از نرم افزار android studio استفاده کنید. ۱
فایل src/MainActivity.java را اصلاح کرده و کد مولتی تاچ را در آن قرار دهید. ۲
Res/layout/activity_main را اصلاح کرده و اجزای مربوط به XML را در آن قرار دهید. ۳
اپلیکیشن را اجرا کنید و یک دستگاه اندروید روشن را انتخاب کرده و اپلیکیشن را روی آن نصب کنید و نتیجه را بررسی کنید. ۴

 

کد زیر نشان دهنده‌ی فایل src/MainActivity.java اصلاح شده است.

package com.example.sairamkrishna.myapplication;



import android.app.Activity;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;



public class MainActivity extends Activity {

   float xAxis = 0f;

   float yAxis = 0f;



   float lastXAxis = 0f;

   float lastYAxis = 0f;



   EditText ed1, ed2, ed3, ed4;

   TextView tv1;



   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);



      ed1 = (EditText) findViewById(R.id.editText);

      ed2 = (EditText) findViewById(R.id.editText2);

      ed3 = (EditText) findViewById(R.id.editText3);

      ed4 = (EditText) findViewById(R.id.editText4);



      tv1=(TextView)findViewById(R.id.textView2);

                       

      tv1.setOnTouchListener(new View.OnTouchListener() {

         @Override

         public boolean onTouch(View v, MotionEvent event) {

            final int actionPeformed = event.getAction();



            switch(actionPeformed){

               case MotionEvent.ACTION_DOWN:{

                  final float x = event.getX();

                  final float y = event.getY();



                  lastXAxis = x;

                  lastYAxis = y;



                  ed1.setText(Float.toString(lastXAxis));

                  ed2.setText(Float.toString(lastYAxis));

                  break;

               }



               case MotionEvent.ACTION_MOVE:{

                  final float x = event.getX();

                  final float y = event.getY();



                  final float dx = x - lastXAxis;

                  final float dy = y - lastYAxis;



                  xAxis += dx;

                  yAxis += dy;



                  ed3.setText(Float.toString(xAxis));

                  ed4.setText(Float.toString(yAxis));

                  break;

               }

            }

            return true;

         }

      });

   }

}

کد زیر محتوای xml اصلاح شده‌ی res/layout/activity_main.xml را نشان می‌دهد.

در کد زیر abc معادل لوگوی tutorialspoint.com است.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"

   android:paddingRight="@dimen/activity_horizontal_margin"

   android:paddingTop="@dimen/activity_vertical_margin"

   android:paddingBottom="@dimen/activity_vertical_margin"

   tools:context=".MainActivity"

   android:transitionGroup="true">

  

   <TextView android:text="Multitouch example" android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:id="@+id/textview"

      android:textSize="35dp"

      android:layout_alignParentTop="true"

      android:layout_centerHorizontal="true" />

     

   <TextView

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:text="Tutorials point"

      android:id="@+id/textView"

      android:layout_below="@+id/textview"

      android:layout_centerHorizontal="true"

      android:textColor="#ff7aff24"

      android:textSize="35dp" />

     

   <ImageView

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:id="@+id/imageView"

      android:src="@drawable/abc"

      android:layout_below="@+id/textView"

      android:layout_centerHorizontal="true"

      android:theme="@style/Base.TextAppearance.AppCompat" />

     

   <EditText

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:id="@+id/editText"

      android:layout_below="@+id/imageView"

      android:layout_alignRight="@+id/textview"

      android:layout_alignEnd="@+id/textview"

      android:hint="X-Axis"

      android:layout_alignLeft="@+id/textview"

      android:layout_alignStart="@+id/textview"

      android:textColorHint="#ff69ff0e" />

     

   <EditText

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:id="@+id/editText2"

      android:layout_below="@+id/editText"

      android:layout_alignLeft="@+id/editText"

      android:layout_alignStart="@+id/editText"

      android:textColorHint="#ff21ff11"

      android:hint="Y-Axis"

      android:layout_alignRight="@+id/editText"

      android:layout_alignEnd="@+id/editText" />

     

   <EditText

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:id="@+id/editText3"

      android:layout_below="@+id/editText2"

      android:layout_alignLeft="@+id/editText2"

      android:layout_alignStart="@+id/editText2"

      android:hint="Move X"

      android:textColorHint="#ff33ff20"

      android:layout_alignRight="@+id/editText2"

      android:layout_alignEnd="@+id/editText2" />

     

   <EditText

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:id="@+id/editText4"

      android:layout_below="@+id/editText3"

      android:layout_alignLeft="@+id/editText3"

      android:layout_alignStart="@+id/editText3"

      android:textColorHint="#ff31ff07"

      android:hint="Move Y"

      android:layout_alignRight="@+id/editText3"

      android:layout_alignEnd="@+id/editText3" />

     

   <TextView

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:text="Touch here"

      android:id="@+id/textView2"

      android:layout_alignParentBottom="true"

      android:layout_alignLeft="@+id/imageView"

      android:layout_alignStart="@+id/imageView"

      android:focusable="true"

      android:typeface="sans"

      android:clickable="true"

      android:textColor="#ff5480ff"

      android:textSize="35dp" />



</RelativeLayout>

کد زیر نشان دهنده‌ی محتوای res/values/string.xml است.

 

<resources>

   <string name="app_name">My Application</string>

</resources>

کد زیر نشان دهنده‌ی محتوای فایل AndroidManifest.xml است.

 

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

   package="com.example.sairamkrishna.myapplication" >



   <application

      android:allowBackup="true"

      android:icon="@mipmap/ic_launcher"

      android:label="@string/app_name"

      android:theme="@style/AppTheme" >

     

      <activity

         android:name=".MainActivity"

         android:label="@string/app_name" >

        

         <intent-filter>

            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />

         </intent-filter>

        

      </activity>

  

   </application>

</manifest>

اپلیکیشن خود را اجرا کنید. برای این کار باید ابتدا گوشی اندرویدی خود را به کامپیوترتان متصل کنید. برای اجرای اپلیکیشن یکی از فایل‌های پروژه‌ی خود را در اندروید استودیو باز کرده و روی آیکون Run در نوار ابزار کلیک کنید. پنجره‌ی زیر در اندروید استودیو برای انتخاب محل اجرای اپلیکیشن نمایش داده می‌شود.

گوشی موبایل خود را انتخاب کرده و سپس برای دیدن محیط اپلیکیشن به صفحه‌ی نمایشگر گوشی خود نگاه کنید.

آموزش مالتی تاچ Multitouch در اندروید

در حالت Default هیج عددی در هیچ کدام از بخش‌ها وجود ندارد. با ضربه زدن به نقاط مختلف صفحه می‌توانید اپلیکیشن را امتحان کنید. مانند تصویر زیر:

چون تنها یک single touch انجام شده است بخش Move عدد ۰ را نشان می‌دهد. با قرار دادن انگشت خود روی صفحه و کشیدن آن متوجه می‌شوید که عددها در بخش Move تغییر می‌کنند. به تصویر زیر توجه کنید:

آموزش مالتی تاچ Multitouch در اندروید

نتیجه گیری

در این پست آموزش مالتی تاچ Multitouch در اندروید را برای شما قرار دادیم. با استفاده از توضیحات، کدها و آموزش‌های تصویری قرار گرفته در این پست می‌توانید فرایند مولتی تاچ را در گوشی اندروید خود اجرا کنید. امیدواریم این پست در رابطه با Android touch برای شما مفید بوده باشد.