حالت Multitouch زماني كه بيش از يك انگشت صفحه را لمس كنند اتفاق مي افتد. اندرويد اجازه انتخاب اين حركات را مي دهد.

زمانی که چند انگشت روی صفحه نمایش لمس شود، اندروید رویدادهای زیر را فرخوانی می کند:

ردیف رویداد و توضیحات
1 ACTION_DOWN

براي اولين نقطه كه صفحه را لمس مي كند اين عمل حركات را آغاز مي كند.

2 ACTION_POINTER_DOWN

براي نقاط زيادي كه بر صفحه وارد مي شود بيش از يك نقطه…

3 ACTION_MOVE

تغييري در طي لمس صفحه و حركت آن اتفاق مي افتد.

4 ACTION_POINTER_UP

فرستادن تماس بيشتر تا زماني كه يك نقطه كه اوليه نباشد بالا بيايد. .

5 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();

 

علاوه بر متدهای فوق، متدهای دیگری نیز برای مدیریت Multitouch در اندروید از کلاس ارائه شده که به شرح زیر است:

شماره متد و توضیحات
1 getAction()

اين روش عمل انجام شده را باز مي گرداند.

2 getPressure()

اين روش تماس اوليه را براي مورد ضميمه شده باز مي گرداند.

3 getRawX()

اين روش بردار X اصلي را هماهنگ مي سازد.

4 getRawY()

اين روش بردار Y اصلي را هماهنگ مي سازد.

5 getSize()

اين روش اندازه را به حالت اندازه اوليه براي مورد ضميمه شده در مي آورد.

6 getSource()

اين روش منبع عمل را در دسترس قرار مي دهد.

7 getXPrecision()

اين روش دقت هماهنگي بردار X را كه گزارش داده شده است باز مي گرداند.

8 getYPrecision()

اين روش دقت هماهنگي بردار Y را كه گزارش داده شده است باز مي گرداند.

مثال

در اينجا مثالي براي مولتي تاچ آمده است. برنامه حالات مولتي تاچ را مي سازد كه به شما اجازه مي دهد تا هماهنگي بين اين حركات را زماني كه مولتي تاچ اجرا مي شود ببينيد.

براي آزمايش كردن اين مثال شما بايد آن را بر روي يك دستگاه حقيقي امتحان كنيد.

مرحله  توضیحات
1 شما از Eclipse IDE براي ساختن برنامه اندرويدي با نام Multitouch استفاده خواهيد كرد و آن را در پوشه com.example.multitouch جاي خواهيد داد.
2 اصلاح src/MainActivity.java file به منظود افزودن كد هاي لازم.
3 اصلاح the res/layout/activity_main به منظور افزودن تركيبات XML به ترتيب
4 اصلاح the res/values/string.xml به منظور افزودن تركيبات رديفي لازم
5 برنامه را اجرا كنيد و يك وسيله اندرويدي اجرايي را انتخاب كنيد سپس برنامه را در آن نصب كنيد و نتيجه را باز بيني كنيد.

محتوای main activity برنامه در فایل 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;
         }
      });
   }
}

 

طراحی برنامه در فایل res/layout/activity_main.xml:

 

<?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>

 

اجازه بدهید برنامه multitouch را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن RunEclipse Run Icon از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه ی محل اجرای برنامه ی اندرویدتان، نمایش خواهد داد.

Anroid MediaPlayer Tutorial

دستگاه موبايلتان را به عنوان يك گزينه انتخاب كنيد و سپس آن را براي ديدن اين پيام چک كنيد.

Android Multitouch Tutorial

به طور پیش فرض در پس زمینه برنامه چیزی را مشاهده نمی کنید، حالا روی عبارت Touch here ضربه بزنید تا نتیجه را ببینید:

Android Multitouch Tutorial

شما خواهید دید که فیلد Move مقدار ۰ را دارد، زیرا شما فقط یک لمس را انجام داده اید.حالا بر روی صفحه ضربه بزنید و انگشت خود را بکشید تا مقدار فیلد فوق تغییر کند.

Android Multitouch Tutorial