حرکات صفحه نمایش - در برنامه نویسی اندروید

اندروید انواع خاصی از رویدادهای صفحه لمسی مانند پینچ، دو بار ضربه زدن، اسکرول، فشار طولانی و فلنچ را ارائه می دهد. اینها همه به عنوان حرکات صفحه نمایش شناخته می شوند. اندروید کلاس GestureDetector را برای دریافت رویدادهای حرکتی ارائه می‌کند و به ما می‌گوید که این رویدادها با حرکات صفحه نمایش مطابقت دارد یا خیر.

برای استفاده از آن، باید یک شی از GestureDetector ایجاد کنید و سپس کلاس دیگری ایجاد کنید که از GestureDetector.SimpleOnGestureListener  ارث بری کرده باشد تا به عنوان شنونده عمل کند و برخی از متد ها را override کند. به کدی های زیر دقت کنید:

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

اندروید کلاس ScaleGestureDetector را برای کنترل حرکت های صفحه نمایش مانند pinch و غیره ارائه می‌کند. برای استفاده از آن، باید یک شی از این کلاس را نمونه سازی کنید. به کدهای زیر دقت کنید :

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

پارامتر اول context و پارامتر دوم listener رویداد می باشد. ما باید listener رویداد را تعریف کنیم و تابع OnTouchEvent را override کنیم تا کار کند. به کدی های زیر دقت کنید :

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

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

1
getFocusX()

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

2
getFocusY()

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

3
getTimeDelta()

این روش اختلاف زمانی بین رویداد مقیاس پذیری قبلی و رویداد مقیاس بندی فعلی را بر حسب میلی ثانیه برمی گرداند.

4
isInProgress()

اگر حرکت مقیاسی در حال انجام باشد، این متد مقدار true را برمی‌گرداند.

5
onTouchEvent(MotionEvent event)

این روش MotionEvents را می پذیرد و در صورت لزوم رویدادها را ارسال می کند.

6

مثال

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

توضیحات مرحله
ابتدا یک پروژه جدید در اندروید استودیو با یک پکیج دلخواه ایجاد کنید. 1
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 2
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 3
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. 4

کدهای فایل MainActivity.class

package com.foray.articlelib;

import android.graphics.Matrix;
import android.os.Bundle;

import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private ImageView iv;
    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);

        iv = findViewById(R.id.imageView);
        SGD = new ScaleGestureDetector(this, new ScaleListener());
    }

    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);
            iv.setImageMatrix(matrix);
            return true;
        }
    }
}

 

کدهای فایل activity_main.xml

<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:padding="16dp"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="مثال حرکات صفحه نمایش"
        android:textSize="25dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="7Cloner.com"
        android:id="@+id/textView"
        android:textColor="@color/black"
        android:layout_below="@+id/textview"
        android:layout_centerHorizontal="true"
        android:textSize="25dp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:src="@drawable/abc"
        android:scaleType="matrix"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>
نتیجه اجرا :

حرکات صفحه نمایش در اندروید حرکات صفحه نمایش در اندروید

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

قیمت آموزش
رایگان
نوع دسترسی
رایگان

این مقاله در حال حاضر تنها به روش رایگان در دسترس می باشد.

ناصر خالدی
مدرس دوره

ناصر خالدی

مهندس شبکه, امنیت, برنامه نویسی تلفن های هوشمند, طراح وب سایت و متخصص هوش مصنوعی

گفتگوی برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر نیاز است تا ابتدا وارد سایت شوید.

هیچ نظری ارسال نشده است.

مقالات پیشنهادی

پی اچ پی - PHP

با استفاده از این زبان می توان وب سایت های پویا طراحی کرد, این زبان می تواند با HTML ادغام شود, در حقیقت یک زبان اسکریپتی متن باز و رایگان است. یعنی زمانی که سرور درخواست ...


۶۲۱
۰
۱۳ آذر ۱۳۹۹

هوش مصنوعی

هوش مصنوعی یا هوش ماشینی, به هوشمندی نشان داده شده توسط ماشین در شرایط مختلف گفته میشود که مقابل هوش طبیعی در انسان ها قرار دارد که ...


۵۱۵
۰
۱۱ آذر ۱۳۹۹

جاوا اسکریپت

جاوا اسکریپت یک زبان پویا و محبوب مبتنی بر شیء, داینامیک و مفسری می باشد. این زبان برای برنامه نویسی سمت سرور و کلاینت استفاده میشود که ...


۵۶۷
۰
۱۳ آذر ۱۳۹۹

هک و امنیت

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


۶۲۳
۰
۱۳ آذر ۱۳۹۹