延迟的onClick事件
onClick event with delay
我有一个在我的布局中声明的 ImageButton xml。我已经告诉它当它被点击时,调用某个方法,playSound。
在 playSound 内部,phone 播放一段持续一定时间的声音,准确地说是 5277 毫秒。我希望 playSound 能够在一定时间(5400 毫秒)内更改 ImageButton 的 ImageResource,然后再更改回来。
这是我的代码:
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 毫秒,之后图像变化。如果我用门铃创建应用程序 'lit,' 我根本无法更改它。
希望这是有道理的。
简而言之,我无法获取 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" />
干杯
我找到了解决办法。我最终使用了计时器 class。
这是我的代码:
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
http://blog.redkitmedia.com/timer-android-example/
Android timer/timertask causing my app to crash?
我有一个在我的布局中声明的 ImageButton xml。我已经告诉它当它被点击时,调用某个方法,playSound。
在 playSound 内部,phone 播放一段持续一定时间的声音,准确地说是 5277 毫秒。我希望 playSound 能够在一定时间(5400 毫秒)内更改 ImageButton 的 ImageResource,然后再更改回来。
这是我的代码:
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 毫秒,之后图像变化。如果我用门铃创建应用程序 'lit,' 我根本无法更改它。
希望这是有道理的。
简而言之,我无法获取 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" />
干杯
我找到了解决办法。我最终使用了计时器 class。
这是我的代码:
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
http://blog.redkitmedia.com/timer-android-example/
Android timer/timertask causing my app to crash?