دوستان گرامی ، دراین بخش به اموزش حرکات اندروید میپردازیم. اندروید انواع خاصی از لمس صفحه را ارائه می دهد که عبارتند از: فشار دادن(pinch)، ضربه ی دوتایی (double tap)، فهرست ها (scrolls)، فشار طولانی مدت (long presses)، flinch .

اندروید گروه GestureDetector را ارائه می دهد تا رویدادهای حرکات را دریافت کرده و به ما بگوید که آیا این رویدادها با حرکات منطبق هستند یا نه. برای استفاده از آن لازم است یک آبجکت از GestureDetector ایجاد کنید و سپس یک گروه دیگر با GestureDetector.SimpleOnGestureListener گسترش دهید تا مانند یک شنونده عمل کنید و از بعضی روش عبور کنید. ترکیب آن را می توانید در زیر ببینید .

GestureDetector myG;‎
myG = new GestureDetector(this,new Gesture());‎

‎ class Gesture extends ‎GestureDetector.SimpleOnGestureListener{‎
‎ public boolean onSingleTapUp(MotionEvent ev) {‎
‎ }‎
‎ public void onLongPress(MotionEvent ev) {‎
‎ } ‎
‎ public boolean onScroll(MotionEvent e1, MotionEvent e2, ‎float distanceX,‎
‎ float distanceY) {‎
‎ }‎
‎ public boolean onFling(MotionEvent e1, MotionEvent e2, ‎float velocityX,‎
‎ float velocityY) {‎
‎ }‎
‎}‎
‎}

رسیدگی به حرکت pinch

اندروید برای رسیدگی به حرکاتی مانند pinch گروه ScaleGestureDetector را ایجاد می کند. برای استفاده از این گروه لازم است که یک آبجکت از این گروه را نمونه گذاری کنید که ترکیب آن را در زیر می بینید .

ScaleGestureDetector SGD;‎

SGD = new ScaleGestureDetector(this,new ScaleListener());

اولین پارامتر کانتکست و دمین پارامتر شنونده ی رویداد (event listener) می باشد. ما باید رویداد شنونده را تعریف کرده و از عملکرد OnTouchEvent برای به کار انداختن آن استفاده کنیم. ترکیب آن را در زیر می بینید.

public boolean onTouchEvent(MotionEvent ev) {‎

‎ SGD.onTouchEvent(ev);‎

‎ return true;‎

‎}‎

private class ScaleListener extends ‎ScaleGestureDetector.SimpleOnScaleGestureListener {‎

‎ @Override

‎ public boolean onScale(ScaleGestureDetector detector) {‎

‎ float scale = detector.getScaleFactor();‎

‎ return true;‎

‎ }‎

‎}‎

علاوه بر pinch، روش های دیگری هم وجود دارند که در مورد رویدادهای لمس بیشتر توضیح می دهند. لیست آنها در زیر ارائه شده اند.

ردیف

متدها و توضیحات

۱

getEventTime()

این روش زمان رویداد را پردازش شدن رویداد اخیر به دست می آورد.

۲

getFocusX()

این روش مختصات X را از نقطه ی کانونی آخرین حرکت به دست می آورد.

۳

getFocusY()

این روش مختصات Y را از نقطه ی کانونی آخرین حرکت به دست می آورد.

۴

getTimeDelta()

این روش تفاوت زمانی بین مقیاس پذیرفته شده ی رویداد قبلی و مقیاس رویداد کنونی به یک هزارم ثانیه(milliseconds) برمی گرداند.

۵

isInProgress()

این روش درست بازمی گردد اگر مقیاس یک حرکت در حال پیشروی باشد.

۶

onTouchEvent(MotionEvent event)

این روش MotionEvents را قبول کرده و اگر رویدادها مناسب باشند، می فرستد.

مثال

در اینجا مثالی را می بینید که استفاده از گروه ScaleGestureDetector را توضیح می دهد. این مثال یک برامه ی پایه ایجاد می کند که به شما اجازه می دهد تا از طریق pinch زوم کنید یا از حالت زوم خارج شوید. برای آزمایش با این مثال به یک دستگاه واقعی یا یک مقلد با صفحه ی لمسی فعال نیاز خواهید داشت.

مراحل

توضیحات

۱

برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان Gestures تحت بسته ی com.example. gestures نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDK و Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.

۲

فایل src/MainActivity.java را برای افزودن کد لازم تغییر دهید.

۳

res/layout/activity_main را برای افزودن مولفه های XML مربوطه تغییر دهید.

۴

res/values/string.xml را برای افزودن رشته ی لازم تغییر دهید.

۵

برنامه را اجرا کرده و یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.

در زیر محتوای تغییریافته ی فایل فعالیت اصلی را مشاهده می کنید.

src/com.example.gestures/MainActivity.java. ‎

package com.example.gestures;‎

import android.app.Activity;‎

import android.graphics.Matrix;‎

import android.os.Bundle;‎

import android.view.Menu;‎

import android.view.MotionEvent;‎

import android.view.ScaleGestureDetector;‎

import android.widget.ImageView;‎

public class MainActivity extends Activity {‎

‎ private ImageView img;‎

‎ private Matrix matrix = new Matrix();‎

‎ private float scale = 1f;‎

‎ private ScaleGestureDetector SGD;‎

‎ @Override

‎ protected void onCreate(Bundle savedInstanceState) {‎

‎ super.onCreate(savedInstanceState);‎

‎ setContentView(R.layout.activity_main);‎

‎ img = (ImageView)findViewById(R.id.imageView1);‎

‎ SGD = new ScaleGestureDetector(this,new ‎ScaleListener());‎

‎ }‎

‎ @Override

‎ public boolean onTouchEvent(MotionEvent ev) {‎

‎ SGD.onTouchEvent(ev);‎

‎ return true;‎

‎ }‎

‎ private class ScaleListener extends ScaleGestureDetector.‎

‎ SimpleOnScaleGestureListener {‎

‎ @Override

‎ public boolean onScale(ScaleGestureDetector detector) {‎

‎ scale *= detector.getScaleFactor();‎

‎ scale = Math.max(0.1f, Math.min(scale, 5.0f));‎

‎ matrix.setScale(scale, scale);‎

‎ img.setImageMatrix(matrix);‎

‎ return true;‎

‎ }‎
‎}‎

‎ @Override

‎ public boolean onCreateOptionsMenu(Menu menu) {‎

‎ // Inflate the menu; this adds items to the action bar ‎if it is present.‎

‎ getMenuInflater().inflate(R.menu.main, menu);‎

‎ return true;‎

‎ }‎
‎}

در زیر محتوای xml تغییریافته ی res/layout/activity_main.xml را مشاهده می کنید.

‎ ‎

‎ ‎

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

‎ Gestures‎

‎ Settings‎

‎ Pinch to zoom in or ‎out!‎

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

‎ ‎

‎ ‎

‎ ‎

‎ ‎

‎ ‎

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

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

اکنون دو انگشت را روی صفحه ی اندروید قرار داده و آن ها را از هم دور کنید. خواهید دید که تصویر اندروید بزرگتر می شود. مانند تصویر زیر

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