PDA

View Full Version : مشکل در متد SetOnTouchListener برای ImageView



saeidd
چهارشنبه 12 آذر 1393, 19:04 عصر
با سلام خدمت دوستان عزیز.
من در برنامه ام از ImageView به عنوان دکمه استفاده می کنم. برای اینکار برای هر ImageView هم متد SetOnTouchListener رو استفاده می کنم و هم SetOnClickListener. به این ترتیب که در متد SetOnTouchListener شکل دکمه رو هنگام لمس عوض می کنم و در متد SetOnClickListener هم مثلا کد رفتن به اکتیویتی بعدی رو می نویسم.

برنامه به درستی کار می کنه. فقط مشکلش اینه که بعضی وقتها -تاکید می کنم فقط بعضی وقتها- وقتی کاربر ImageView رو لمسش می کنه و سریع انگشتشو برمیداره، انگار برنامه اجازه پیدا نمی کنه که عکس حالت لمس رو نمایش بده و باید رویداد Onclick رو اجرا کنه؛ در نتیجه خطا میده و میاد بیرون.

توضیح اینکه دوتا عکسی که برای حالت نرمال و حالت لمس در نظر گرفتم، هر کدوم حدود 60 کیلوبایت هستن. این خطا به خاطر حجم زیاد عکسهاست یا کدهام مشکلی داره که اینطور میشه؟

این هم کد:

btnsetting.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent i = new Intent(Main.this, Setting.class);
startActivity(i);
overridePendingTransition(R.anim.in, R.anim.out);

}
});

btnsetting.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
btnsetting.setImageResource(R.drawable.btnsetting_ down);
break;
}
case MotionEvent.ACTION_UP:{
btnsetting.setImageResource(R.drawable.btnsetting_ up);

break;
}
}

return false;
}
});

saeidd
پنج شنبه 13 آذر 1393, 11:21 صبح
حتی وقتی SetOnClickListener رو کامل حذف می کنم و دستورات داخل اون رو تو قسمت case MotionEvent.ACTION_UP می نویسم. بازم خطا اتفاق می افته و از برنامه میاد بیرون. جالب اینه که با YouWave که تست می کنم هیچ مشکلی نداره و خوب کار می کنه، برا همین نمیتونم با trace مشکل رو متوجه بشم؛ و فقط رو دستگاه واقعی این خطا رو میده. ضمن اینکه اون «بعضی وقتها» که در پست اول گفتم، حالا شده «همیشه»!! نمی دونم اصلا چشه؟
اساتید لطفا کمک کنن، بدجوری گیر کردم

parvizwpf
پنج شنبه 13 آذر 1393, 13:26 عصر
اروری که میده چی هست؟

saeidd
پنج شنبه 13 آذر 1393, 13:53 عصر
اروری که میده چی هست؟
ارور خاصی نیست، می نویسه اپلیکیشن متوقف شده و از برنامه میاد بیرون.
فقط تعجبم از اینه که روی ماشین مجازی هیچ مشکلی نداره!!

parvizwpf
پنج شنبه 13 آذر 1393, 14:45 عصر
setontouch رو کلا بی خیال شید باز هم ارور داره؟

saeidd
پنج شنبه 13 آذر 1393, 15:39 عصر
setontouch رو کلا بی خیال شید باز هم ارور داره؟
نه ارور نداره؛ یعنی هر کدوم از SetOnTouch و SetOnClick رو که پاک می کنم دیگه ارور نداره، ارور وقتی پیش میاد که هر دوش باشه و یا SetOnClick رو پاک کنم و دستوراتش رو منتقل کنم تو SetOnTouch.
یعی بطور مشخص وقتی میخواد بعد از دستور :

btnsetting.setImageResource(R.drawable.btnsetting_ up);
دستور رفتن به اکتیویتی بعدی رو اجرا کنه، برنامه متوقف می شه و میاد بیرون، اونم تو تبلت و نه ماشین مجازی.
حتی من برای تست، به جای setImageResource از setBackgroundColor استفاده کردم، دیدم مشکلش برطرف شد.

saeidd
شنبه 15 آذر 1393, 11:44 صبح
روی یکی دو دستگاه دیگه امتحان کردم، هیچ مشکلی نداشت. مثل اینکه رو تبلت خودم مشکل داره که اونم بعضی وقتها خود به خود درست میشه و دوباره قاط میزنه؛ علتش چیه؟ امکانش هست چون تند تند فایل apk برنامه رو برای تست رو تبلتم می ریزم و نصب می کنم، این مشکل بوجود اومده باشه؟ مثلا در هر بار نصب جدید، فایلهای نصب قبلی درست پاک نشه یا چه میدونم چیزهای اینطوری؟

saeidd
سه شنبه 18 آذر 1393, 00:00 صبح
روی یکی دو دستگاه دیگه امتحان کردم، هیچ مشکلی نداشت. مثل اینکه رو تبلت خودم مشکل داره که اونم بعضی وقتها خود به خود درست میشه و دوباره قاط میزنه؛ علتش چیه؟ امکانش هست چون تند تند فایل apk برنامه رو برای تست رو تبلتم می ریزم و نصب می کنم، این مشکل بوجود اومده باشه؟ مثلا در هر بار نصب جدید، فایلهای نصب قبلی درست پاک نشه یا چه میدونم چیزهای اینطوری؟
بالاخره مشکل رو پیدا کردم؛ اینجا مطرحش می کنم تا دوستان دیگه هم استفاده کنن و مثل من چند روز وقت شون تلف نشه؛ مشکل اینجا بود که من عکسی رو که به عنوان بک گراند در اکتیویتی هام استفاده کرده بودم، از نوع jpg بود و در یه مقاله خوندم که بعضی از گوشیها با این نوع عکس مشکل دارن و بهتره که از فرمت png استفاده بشه؛ من فرمتش رو عوض کردم و درست شد.