2015-04-19 2 views
0

У меня есть ImageButton, который объявлен в моем макете xml. Я сказал, когда он щелкнут, чтобы вызвать определенный метод, playSound.onClick событие с задержкой

Внутри playSound телефон воспроизводит звук, который длится определенное время, 5277 мс, если быть точным. Я хочу, чтобы playSound смог изменить ImageResource в ImageButton на определенное количество времени (5400 мс), а затем изменить его.

Вот мой код:

ImageButton dBellButt; 

public void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.activity_main); 
    dBellButt.setImageResource(R.drawable.doorbell2); 

public void playSound(View view) { 
    dBellButt.setImageResource(R.drawable.doorbell); 
    dBell.start(); 
    if (vibeOn) { 
     Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
     vibe.vibrate(500); 
    } else { 
     // No vibration 
    } 
    try { 
     Thread.sleep(5400); 
    } catch (InterruptedException e) { 
    } 
    dBellButt.setImageResource(R.drawable.doorbell2); 
} 

doorbell2 является изображение освещенного дверного звонка. doorbell - изображение неосвещенного дверного звонка.

Я могу переключить положение двух изображений, и он будет работать нормально, т. Е. Если у меня будет установлен дверной звонок, когда кнопка будет нажата, он будет гореть до 5400 мс, после чего изображение изменения. Если я создам приложение с «зажженным» дверным звонком, я не могу его вообще изменить.

Надеюсь, это имело смысл.

Короче говоря, я не могу заставить ImageButton изменить ImageResource. setImageResource после Thread.sleep(); отлично работает, но до этого нет.

Почему это не работает?

Спасибо!

Натан

EDIT:

Фигурный Я бы присоединить мой XML всякий случай.

<ImageButton 
    android:id="@+id/dBellButton" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:scaleType="fitCenter" 
    android:padding="0dp" 
    android:background="@null" 
    android:onClick="playSound" 
    android:contentDescription="@string/ImgDesc" /> 

Приветствия

ответ

0

Я нашел решение. Я закончил использование класса таймера.

Вот мой код:

public void playSound(View view) { 
    dBell.start(); 
    if (vibeOn) { 
     Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
     vibe.vibrate(500); 
    } else { 
     // No vibration 
    } 
    Timer timer = new Timer(); 
    TimerTask picSwitch1 = new TimerTask() { 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        dBellButt.setImageResource(R.drawable.doorbell); 
       } 
      }); 
     } 
    }; 
    TimerTask picSwitch2 = new TimerTask() { 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        dBellButt.setImageResource(R.drawable.doorbell2); 
       } 
      }); 
     } 
    }; 
    timer.schedule(picSwitch1, 10); 
    timer.schedule(picSwitch2, 5400); 
} 

Используя это позволяет изображение для переключения после времени задержки.

Проблема, с которой я столкнулся с функцией сна, заключалась в том, что приложение замерзало (duh ...). Я не мог использовать какой-либо другой интерфейс. Это решение устраняет эту проблему. Я приложу ссылки, которые я использовал для решения этой проблемы.

http://developer.android.com/reference/java/util/Timer.html

http://blog.redkitmedia.com/timer-android-example/

Android timer/timertask causing my app to crash?

Смежные вопросы