بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
چطور با نگه داشتن button یک متغیر را افزایش و با برداشتن کاهش بدم؟
سلام دوستان
من برای برنامم یه قسمت نوشتم که وقتی یک Button را نگه دارم یه متغیر مقدارش با یه سرعت ثابتی زیاد بشه تا به 255 برسه و وقتی اون را رها میکنم با سرعت بیشتری کم بشه تا به صفر برسه. نمونه کدم اینه
private Thread threadDown = null; private Thread threadUp = null;
private int test = 0;
btnStart.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { switch (arg1.getAction()) { case MotionEvent.ACTION_DOWN: if (threadUp != null) { if (threadUp.isAlive()) { threadUp.interrupt(); } } threadDown = new Thread(new Runnable() { @Override public void run() { while (test < 255) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } test++; G.HANDLER.post(new Runnable() { @Override public void run() { txtTest.setText("" + test); } }); } } }); threadDown.start(); break; case MotionEvent.ACTION_UP: if (threadDown != null) { if (threadDown.isAlive()) { threadDown.interrupt(); } } threadUp = new Thread(new Runnable() { @Override public void run() { while (test> 0) { try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } test--; G.HANDLER.post(new Runnable() { @Override public void run() { txtTest.setText("" + test); } }); } } }); threadUp.start(); break; } return true; } });
حالا مشکلش اینه که thread ها باهم تداخل پیدا میکنند و مقدار متغیر test به صورت نامنظم کم و زیاد میشه. به نظرتون چطور مشکلش را حل کنم؟
+6
0
اولا ترد برای اینکار نیست - handler.postDelayed رو استفاده کن و ثانیا از یه فلگ بولین برای فشرده بودن یا نبودن دکمه استفاده کنی این مشکل تداخل پیش نمیاد (11 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
PandaStudio
11 سال پیش
0
0
این کد را با handler که گفتید نوشتم اما جواب نمیده مشکلش کجاست؟
btnStart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN:
state = true;
while ((test < 255) && (state == true)) {
G.HANDLER.postDelayed(new Runnable() {
@Override
public void run() {
test++;
txtTest.setText("" + test);
}
}, 10);
}
break;
case MotionEvent.ACTION_UP:
state = false;
while ((test > 0) && (state == false)) {
G.HANDLER.postDelayed(new Runnable() {
@Override
public void run() {
test--;
txtTest.setText("" + test);
}
}, 5);
}
break;
}
return true;
}
});
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .