我有一个在我的布局xml中声明的ImageButton。我点击它时告诉它,调用某种方法,播放声音。
在playSound内部,手机会播放持续一定时间的声音,精确到5277毫秒。我希望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。 setImageResource
之后的Thread.sleep();
工作正常,但前面的工作没有。
为什么这不起作用?
谢谢!
森
编辑:
想我会附上我的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 :(得分: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);
}
使用此功能可以在延迟时间后切换图片。
我使用睡眠功能的问题是它会导致应用程序冻结(呃...)。我无法使用任何其他给定的界面。该解决方案解决了这个问题。我会附上我用来解决这个问题的链接。
http://developer.android.com/reference/java/util/Timer.html