延迟的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?