بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

شبیه ساز عکس به صورت دکمه (button)

مدیریت گفتگو
gadolf 10 سال پیش
آخرین تغییر: 10 سال پیش

من دو تا عکس دارم که میتونن با هم جابجا بشن، فرض کنید عکس دوم کمی کوچکتر از عکس اولی باشه، وقتی روی عکس کلیک میشه، عکس کوچکتر جایزگزین اون میشه و انگار روی یک دکمه کلیک کردیم و حس داخل رفتن دکمه را به ما میده. من کدهای زیر را نوشتم اما دو تا مشکل وجود داره:

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

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

این کد رو چه جور ویرایش کنم کنم که کار منو انجام بده؟

نظرات

Hadi 10 سال پیش
ااز onTouchListener استفاده کن، در مورد نحوه استفادش جستجو کن
Hadi 10 سال پیش
ببخشید عکست لود نشده بود، فک کنم توی دیفالتش detection کنی MotionEvent.ACTION_CANCEL مشکل حل بشه
Hadi 10 سال پیش
detection setAction
Reza 10 سال پیش
سلام ، خب هر دو مشکل رو با یه شرط if مدیریت کنید و در کشن MOVE بگید اگه جابجایی روی عکس از مثلا n پیکسل بیشتر بود دستورات اجرا بشه ، و برای مشکل دوم هم همینطور : در اکشن DOWN ، مختصات مکان کلیک شده رو در یه متغییر ذخیره کنید و هنگام UP کردن هم مختصات UP رو بگیرید و بگید اگه اختلاف این دو ( محل DOWN و UP ) کمتر از سایز عکس بود دستورات اجرا بشه .
gadolf 10 سال پیش
@رضا خب سایتی یا مثالی که بتونم ازش کمک بگیرم دارید؟
Reza 10 سال پیش
متأسفانه در این مورد نه ، ولی کاش کدها رو یه جوری میذاشتی که بشه کپی گرفت .
gadolf 10 سال پیش
آدرس زیر رو کپی کن، تو سایت stackoverflow.com پرسیدم: لینک
alfredo 10 سال پیش
چرا از متدی که استاد در درس 17 توضیح دادند استفاده نمیکنید ؟! درس 03-02 Designing Art Assets خیلی راحت میتونید یک سلکتور با عکساتون بسازید و بعنوان دکمه تعریف کنید که با هربار کلیک روی عکس ها سوییچ بشه.
gadolf 10 سال پیش
ممنون، من تقریبا یک سوم آموزش ها رو دیدم. ممنون از راهنمایی تون. حتما میرم نگاه میکنم.
میرحسین 10 سال پیش
ببخشید شما عکستون میخواهید با جابجایی انگشت در صفحه تغییر کند یا نه فقط میخواهید با گذاشتن دست و برداشتن تغییر کند درست متوجه نشدم
gadolf 10 سال پیش
من میخوام وقتی انگشتم وقتی روی عکس هست عکس دوم به نمایش دربیاد و وقتی انگشتم رو بدون برداشتن از محدوده عکس خارج کنم عکس به حالت اول برگرده.
Reza 10 سال پیش
کدهایی که پایین گذاشتم دقیقا همین کارو میکنه . همینطور استفاده از Selector .
gadolf 10 سال پیش
تنها مشکل این کد اینه که وقتی از محدوده عکس خارج میشم نمیخوام کاری انجام بده (وارد Acitivity جدید بشه)
gadolf 10 سال پیش
در case MotionEvent.ACTION_UP شرط if (x < view.getWidth() || y < view.getHeight رو گذاشتم ولی باز درست کار نمیکنه.

پاسخ‌ها 3

Reza 10 سال پیش

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

نظرات

Reza 10 سال پیش
نمیدونم چرا ارسال نمیشه انشاءا... فردا صبح میفرستم
gadolf 10 سال پیش
ممنون، باشه منتظرم. اما فقط این نکته باقی میمونه که خب DPI گوشی ها با هم فرق میکنه، اگر با پیکسل کار کنم به نظرم به طور ایده آل کار نمیکنه. من پیشنهاد میکنم این نرم افزار رو نصب کنید، شبیه سازی دکمه رو به شکل خیلی خوبی انجام داده: لینک باز از لطفت ممنونم. منتظرم.
Reza 10 سال پیش

سلام ، این کدها رو جایگزین کنید ببینید همون چیزیه که میخواین : ( 3 خطی که کامنت new داره جدیده )

 oldImage.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View view, MotionEvent event) {

float x = event.getX(); //---> new
float y = event.getY(); //---> new

int action = event.getAction();

switch (action) {
case MotionEvent.ACTION_DOWN:

Log.i("Touch", "Touch down");
oldImage.setImageResource(R.drawable.newImage);
break;

case MotionEvent.ACTION_MOVE:

if (x > (view.getWidth()) || x < 0 || y < 0 || y > (view.getHeight())) {//---> new
Log.i("Touch", "Touch move");
oldImage.setImageResource(R.drawable.oldImage);
}
break;

case MotionEvent.ACTION_UP:
Log.i("Touch", "Touch up");
oldImage.setImageResource(R.drawable.oldImage);
Intent intent = new Intent(Home.this, NewClass.class);
Home.this.startActivity(intent);
break;

default:
break;
}

return true;
}
});

نظرات

Reza 10 سال پیش
البته بدون نیاز به کد نویسی هم میشه همین خروجی رو گرفت ، کافیه برای عکستون selector تنظیم کنید که اگه press شد عکس بزرگ جایگزین بشه و اگه unPress شد عکس کوچک .
gadolf 10 سال پیش
ممنون دوست من. :) زحمت کشیدی.
gadolf 10 سال پیش
همین selector به نظرم منطقی تره. اما الان به یک error عجیب برخورد کردم که نمدونم چجوری رفعش کنم وگرنه اگلیپس اجازه اجرا برنامه رو نمیده. الان تو انجمن میپرسم.
Reza 10 سال پیش
فقط 3 خط اضافه شده ، من با همینا نتیجه گرفتم و اجرا شد ، اگه اجرا نمیشه مشکل از جای دیگه ست . در کل selector بهتر و کوتاهتره .
gadolf 10 سال پیش
هنوز دستورات شما رو ننوشتم. یه خطا تو پروژه م به وجود اومده باید رفعش کنم.
Reza 10 سال پیش

 case MotionEvent.ACTION_UP:
if (x < (view.getWidth()) && x > 0 && y > 0 && y < (view.getHeight())) {//---> new
Log.i("Touch", "Touch up");
oldImage.setImageResource(R.drawable.oldImage);
Intent intent = new Intent(ActivityMain.this, ActivitySecond.class);
ActivityMain.this.startActivity(intent);
}
break;

البته نام اکتیویتی های خودتو بذار .

نظرات

gadolf 10 سال پیش
ممنون، درست کار میکنه.
gadolf 10 سال پیش
حق با شماست، حواسم نبود باید به جای || از && استفاده میکردم تا به یک مستطیل محدود بشه. ممنونم.

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