یه تابستون متفاوت با یه تصمیم هوشمندانه! دوره هوش مصنوعی با تخفیف ویژه، فقط با کد AI84 دوره هوش مصنوعی با تخفیف ویژه، فقط با کد AI84
🎯 ثبت نام

آموزش کار با Gestures و مدیریت رخدادهای فعال شده از حرکات مختلف بر روی نمایشگر

کار با Gesture ها و پیاده سازی کلاس GestureOverlayView در اندروید

سیستم اندروید، برای لمس و حرکت دادن انگشت بر روی سطح نمایشگر، رخدادهای معینی نظیر بزرگ نمایی، فشار دادن طولانی و پیمایش با نوار اسکرول در صفحه را ارائه می دهد. به این رخدادها که در بر اثر لمس نمایشگر اتفاق افتاده و فعال می شوند در اصطلاح gestures گفته می شود.

برای استفاده از این امکان اندروید، اپلیکیشن شما بایستی یک نمونه از کلاس GestureOverlayView را پیاده سازی کند. سپس می توانید در این view، سایر کامپوننت های رابط کاربری و view های خود را جایگذاری نمایید.

gesture ها را منابع باینری تشکیل داده و در اختیار توسعه دهنده قرار می دهند. این منابع را می توان با استفاده از Android SDK تهیه کرد.

جهت بارگذاری این منابع باینری و gesture ها در activity یا صفحه قابل مشاهده برای کاربر لازم است متد GestureLib.fromRawResource() را فراخوانی کنید. پس از آنکه gesture توسط سیستم شناسایی شد، متد "onGesturePerformedListener" فراخوانده می شود. اما قبل از آن کلاس activity ای که می خواهد gesture را بارگذاری کند باید توابع اینترفیس "OnGesturePerformedListener" را پیاده سازی کرده و با فراخوانی متد "addOnGesturePerformedListener()" بر روی آبجکت ساخته شده از روی GestureOverlayView، خود را معرفی نماید.

سیستم اندروید، آن دسته از gesture هایی را که شناخته با رنگ زرد و gesture هایی که برایش قابل شناسایی نیستند را با رنگ زرد کم رنگ نمایش می دهد. توسعه دهنده، در صورت تمایل، می تواند این قابلیت را غیر فعال کند. برای نیل به این هدف تنها کافی است که یکی از دو تابع setUncertainGestureColor(Color.TRANSPARENT) یا setGestureColor(Color.TRANSPARENT) را بر روی (آبجکت یا نمونه از) GestureOverlayView فراخوانی نماید.

اگر از "GestureBuilder" برای ساخت gesture در شبیه ساز اندروید (Emulator) استفاده کنید، در آن صورت می توانید تعداد زیادی gesture با اسم یکسان ایجاد نمایید. از این طریق امکانی برای شما فراهم می شود تا gesture دلخواه و مد نظر خود را پیدا کرده و تعیین نمایید. اگر برای ویرایش 1.6 اندروید Android Emulator ایجاد کنید، این اپلیکیشن به صورت پیش فرض بر روی دستگاه شما نصب شده و آماده ی استفاده می باشد. لازم است یک دستگاه با قابلیت حافظه خارجی (sd card) ایجاد کنید چرا که در غیر این صورت امکان ذخیره ی gesture ها را نخواهید داشت. تمامی gesture ها در محیط شبیه ساز، داخل فایل gestures ذخیره می شوند.

شما می توانید تمامی gesture ها را به وسیله ی ابزار adb از شبیه ساز (emulator) به دستگاه محلی خود کپی نمایید. کافی است دستور زیر را در خط فرمان درج کنید:

./adb pull /sdcard/gestures ~/test

فایل gesture بایستی تحت آدرس "res/raw" در اپلیکیشن جایگذاری شود. پس از این کار می توانید از فایل مزبور به راحتی در آبجکت GestureOverlayView استفاده نمایید.

مثال

یک پروژه و activity جدید به ترتیب به نام های "de.vogella.android.gestures" و "GestureTest" ایجاد نمایید. سپس تعدادی gesture ایجاد کرده و آن ها را طبق توضیح فوق، در اپلیکیشن مورد نظر جایگذاری نمایید.

مثال Arrow Keys

متاسفانه UI builder از GestureOverlayView پشتیبانی نمی کند. می توانید برای مشاهده ی متن خطای مربوطه (عدم امکان استفاده از GestureOverlayView در layout builder) به آدرس http://code.google.com/p/android/issues/detail?id=1368 مراجعه کنید. از این رو توسعه دهنده ناگذیر باید یک layout بدون gesture view ساخته و بعد این view را از طریق کدنویسی به GestureOverlayView اضافه کند.

فایل layout _main.xml_ را مانند زیر ایجاد کنید.

1
2
3
4
5
<!--?xml version="1.0" encoding="utf-8" ?-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
<textview android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello"></textview>
</linearlayout>
<button></button>

کلاس activity زیر را پیاده سازی نمایید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package de.vogella.android.gestures;
import java.util.ArrayList;
import android.app.Activity;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.gesture.Prediction;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class GestureTest extends Activity implements OnGesturePerformedListener {
        private GestureLibrary gestureLib;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                GestureOverlayView gestureOverlayView = new GestureOverlayView(this);
                View inflate = getLayoutInflater().inflate(R.layout.main, null);
                gestureOverlayView.addView(inflate);
                gestureOverlayView.addOnGesturePerformedListener(this);
                gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
                if (!gestureLib.load()) {
                        finish();
                }
                setContentView(gestureOverlayView);
        }
        @Override
        public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
                ArrayList<prediction> predictions = gestureLib.recognize(gesture);
                for (Prediction prediction : predictions) {
                        if (prediction.score > 1.0) {
                                Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT)
                                                .show();
                        }
                }
        }
}
</prediction><button></button>

اپلیکیشن را اجرا کنید. با توجه به منطق برنامه و کدی که برای اپلیکیشن خود نوشتید، باید بتوانید gesture های مختلفی ترسیم کرده و خروجی را در لحظه مشاهده نمایید. در اپلیشکن جاری تنها صرفا یک پیغام Toast نمایش داده می شود ولی شما می توانید هر عملیاتی که دوست دارید تعریف نمایید.

Gesture Test
1396/01/23 5349 1604
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...