آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تشخیص یک طرح ترسیم مربعی در تاچ

zerohour  9 سال پیش  9 سال پیش
0 0

سلام

میخواستم ببینم میشه یه مربع 5 در 5 باشه که اگه کاربر روی صفحه انگشتش رو گذاشت و کشید مربع هایی که تاچ شده رنگش قرمز بشه (یه جورایی شبیه Unlock Pattern)- قسمت تاچ رو بررسی کردم، ولی اینکه تشخیص بده مختصاتی که الان تاچ شده برابر مختصات یکی از مربع ها هست رو متوجه نشدم. بهتره مربع ها TextView باشه

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
JKM  9 سال پیش
+3 0

اگر فرض کنیم مربع ها 3x3 باشند و همه این مربع ها داخل یک LinearLayout با آیدی lnl باشند( فرقی نمی کند داخل چه نوع Layout ی باشند)

ابتدا طول و عرض این linearLayout را بدست می آوریم و تقسیم بر 3 می کنیم تا اندازه یک مربع بدست آید :

int height = lnl.getLayoutParams().height/3;
int width = lnl.getLayoutParams().width/3;
 

سپس یک لیسنر برای این linearLayout می نویسیم:

 OnTouchListener l;
l = new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { //شرط قرار گرفتن تاچ در موقعیت مربع اول if ((event.getY() < height) && (event.getX() < width)) { i1.setBackgroundColor(Color.RED);//دستور رنگ کردن مربع اول return true; } if ((event.getY() > height) && (event.getY() < height * 2) && (event.getX() < width)) { i4.setBackgroundColor(Color.RED); return true; } if ((event.getY() > height * 2) && (event.getX() < width)) { i7.setBackgroundColor(Color.RED); return true; } //============================================== if ((event.getY() < height) && (event.getX() > width) && (event.getX() < width * 2)) { i2.setBackgroundColor(Color.RED); return true; } if ((event.getY() > height) && (event.getY() < height * 2) && (event.getX() > width) && (event.getX() < width * 2)) { i5.setBackgroundColor(Color.RED); return true; } if ((event.getY() > height * 2) && (event.getX() > width) && (event.getX() < width * 2)) { i8.setBackgroundColor(Color.RED); return true; } //============================================== if ((event.getY() < height) && (event.getX() > width * 2)) { i3.setBackgroundColor(Color.RED); return true; } if ((event.getY() > height) && (event.getY() < height * 2) && (event.getX() > width * 2)) { i6.setBackgroundColor(Color.RED); return true; } if ((event.getY() > height * 2) && (event.getX() > width * 2)) { i9.setBackgroundColor(Color.RED); return true; } return true; } };
lnl.setOnTouchListener(l);
 

نکته: اگر false به متد onTouch بر گردانیم یعنی دستورات داخل onToch فقط یکبار انجام می شود ولی وقتی true به متد برمیگردانیم باعث میشویم اجرای دستورات لیسنر بدون برداشتن تاچ و با حرکت روی صفحه دوباره call شوند این یعنی همان خواسته شما که میخواهید با کشیدن تاچ بر روی خانه های دستوراتی اجرا شود.

 

0 0
تشکر از شما دوست عزیز (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .