onClick事件有延迟

时间:2015-04-19 22:29:40

标签: android-studio imagebutton thread-sleep

我有一个在我的布局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" />

干杯

1 个答案:

答案 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

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

Android timer/timertask causing my app to crash?