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

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

gadolf  8 سال پیش  8 سال پیش
0 0

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

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

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

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

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

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

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

سلام ، این کدها رو جایگزین کنید ببینید همون چیزیه که میخواین : ( 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;
}
});
0 0
البته بدون نیاز به کد نویسی هم میشه همین خروجی رو گرفت ، کافیه برای عکستون selector تنظیم کنید که اگه press شد عکس بزرگ جایگزین بشه و اگه unPress شد عکس کوچک . (8 سال پیش)
+1 0
ممنون دوست من. :) زحمت کشیدی. (8 سال پیش)
0 0
همین selector به نظرم منطقی تره. اما الان به یک error عجیب برخورد کردم که نمدونم چجوری رفعش کنم وگرنه اگلیپس اجازه اجرا برنامه رو نمیده. الان تو انجمن میپرسم. (8 سال پیش)
0 0
فقط 3 خط اضافه شده ، من با همینا نتیجه گرفتم و اجرا شد ، اگه اجرا نمیشه مشکل از جای دیگه ست . در کل selector بهتر و کوتاهتره . (8 سال پیش)
0 0
هنوز دستورات شما رو ننوشتم. یه خطا تو پروژه م به وجود اومده باید رفعش کنم. (8 سال پیش)
پاسخ به سوال 
Reza  8 سال پیش
+1 0

 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;

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

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

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