【问题标题】:change image of imagebutton更改图像按钮的图像
【发布时间】:2012-07-28 21:58:13
【问题描述】:

我开始使用 android 和 java。

我尝试制作一个 simon 游戏,但遇到了一些问题。

我写这个是为了显示 simon 按钮序列或玩家按下的按钮:

    if (but_num == 1) {
        ib1.setImageResource(R.drawable.bullet_square_green);
        MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
        sound.start();
        for (int x = 1; x < 10000000; x++) { };
        ib1.setImageResource(R.drawable.bullet_ball_green);
    } else if (but_num == 2) {

它应该改变每个图像按钮的图像,播放声音,等待一段时间(对于 {})然后 再换一张图……

但是效果不好...它播放声音并且确实通过bullet_square_xxx改变了图像,但是眼睛看不到图像的变化,只有在图像没有再次变回来的情况下才能看到变化bullet_ball_xxx :-(

我认为这是我的错,因为我编写的代码与 java 真正有效的代码不同...我是 初学者,不要在 java 中思考...我脑子里已经有了 Visual Basic 程序结构。

谢谢你,对不起我的英语!

【问题讨论】:

  • 更正了一些拼写。

标签: java android imagebutton


【解决方案1】:

这可能是由于事件调度线程的延迟以及空循环甚至可能被编译器忽略的事实,因为它是静态的,很容易预测它对程序没有影响。我的建议是首先在 GUI 上强制重新绘制/更新并使用 Thread.sleep。像这样的:

if (but_num == 1) {
    ib1.setImageResource(R.drawable.bullet_square_green);
    updateUI(); // if you are somewhere in a class extending any Frame/Panel
    //If you are in other class use mainFrame.repaint(); 
    MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
    sound.start();
    try{
        Trhead.sleep(3000);
    } catch (InterruptedException e) {}
    ib1.setImageResource(R.drawable.bullet_ball_green);
    updateUI(); //only if this effect is delayed too
} else if (but_num == 2) {

【讨论】:

    【解决方案2】:

    好的....我认为延迟是您代码中的问题。由于现在有可用的高速处理器可以在几毫秒内计数到 10000000,我的确实如此。所以不要使用老式的 for 循环来引入延迟使用

    线程.sleep(5000);

    这会导致 5 秒的延迟,参数是以毫秒为单位的时间。

    【讨论】:

    • 我尝试使用 thread.sleep() 并且图像没有改变。 :-( 西蒙说游戏只使用图像或帧中继的背景颜色可能更好。
    【解决方案3】:

    还有另一个线程谈论引入延迟: How to pause / sleep thread or process in Android?

    你可以试试这个[我从那个帖子复制粘贴]:

     if (but_num == 1) {
        ib1.setImageResource(R.drawable.bullet_square_green);
        MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
        sound.start();
    
        // SLEEP 2 SECONDS HERE ...
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
         public void run() { 
             ib1.setImageResource(R.drawable.bullet_ball_green);
         } 
    }, 2000);
    
    
    } else if (but_num == 2) {
    

    【讨论】:

    • 这个运行...但是图像的变化不是很好...我正在考虑只使用图像或帧中继的背景颜色(普通或荧光笔)...也许更适合“西蒙说”游戏......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2014-02-02
    相关资源
    最近更新 更多