2015-04-19 163 views
0

我有一个ImageButton在我的布局xml中声明。我已经告诉它,当它被点击时,调用某种方法,playSound。延迟onClick事件

在playSound的内部,手机会播放持续一定时间的声音,准确地说是5277 ms。我希望playSound能够将ImageButton的ImageResource更改一段时间(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。 Thread.sleep();setImageResource工作正常,但它之前没有。

这是怎么回事?

谢谢!

弥敦道

编辑:

想我会附上我的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?