点击时更改Android按钮图像

3

我有一个按钮和两张图片,我希望按钮的默认图像是btn1.jpg,当点击按钮时,图像应立即更改为btn2.jpg,并在3秒钟后再次恢复为btn1.jpg。请告诉我如何实现这个功能?

    package com.example.btn;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    private View ButtonName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void yolo(View v) {
        switch (v.getId()) {
            case R.id.buttonName:
                ButtonName.setBackgroundResource(R.drawable.btn2);
                //Disable click on Button
               ButtonName.setEnabled(false);
               try {
                   Thread.sleep(3000);
               }
               catch (Exception e) {
                  e.printStackTrace();
               }
               ButtonName.setBackground(getResources().getDrawable(R.drawable.btn1));
               break;

            case default:
                ButtonName.setBackgroundResource(R.drawable.btn1);
        }
    }

}
4个回答

1

你必须在 OnClick 方法中更改按钮的背景图片为btn2.jpg。之后,你必须启动一个计时器来倒数3秒钟,然后再次将按钮图像更改为btn1.jpg

private final int interval = 3000;
private Handler handler = new Handler();
private Runnable runnable

btn.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {

        btn.setBackground(getResources().getDrawable(R.drawable.btn2))

        //Start runnable after 3 seconds
        handler.postDelayed(runnable, interval);

    }
});

runnable = new Runnable(){
    public void run() {
       btn.setBackground(getResources().getDrawable(R.drawable.btn1)) 
    }
};

1
最终我自己弄懂了!
  1. 在xml中为按钮设置背景

  2. 使用以下代码:

    package com.example.btn;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    
    public class MainActivity extends Activity {
        Handler mHandler; // 全局实例
        Runnable your_runnable; // 全局实例
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void yolo(final View view) {
    
            if (view == view) {
                view.setBackgroundResource(R.drawable.btn1);
                mHandler = new Handler();
                your_runnable = new Runnable() {
    
                    @Override
                    public void run() {
                        view.setBackgroundResource(R.drawable.btn2);
    
                   }
    
                };
    
                mHandler.postDelayed(your_runnable, 3000L);// 3秒计时器
    
            }
        }
    }
    

0

好的,首先,你这里有一个错误:

ButtonName.setBackgroundResource(getresources().getDrawable(R.drawable.btn2));

然后,在您的按钮上添加一个clickListener:

private Thread t = new Thread(new Runnable {
    @Override
    public void run() {
        ButtonName.setBackgroundResource(getresources().getDrawable(R.drawable.btn2));
       //Disable click on Button
       ButtonName.setEnabled(false);
       try {
           Thread.sleep(3000);
       }
       catch (Exception e) {
          e.printstacktrace();
       }
       ButtonName.setBackgroundResource(getresources().getDrawable(R.drawable.btn1));
    }
 });

 ButtonName.setOnClickListener (new OnClickListener (
    @Override
    public void onClick(View v) {
       t.start();
    }
 ));

我认为这就是你想要的


没有使用onClickListener,我不知道你如何检测按钮的点击。使用一个按钮和一个ClickListener会更容易。 - Maxouille
这个 Thread.sleep 不是最好的选择。它会阻塞 UI 线程和 onClick 事件。你必须让 onClick 事件先完成,然后再开始你想要执行的其他操作。 - Marcos B.

0

这可能适合你!

public class MainActivity extends Activity {

  Button button;
  private Handler handler;


      @Override
      protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

          button=(Button)findViewById(R.id.yourbuttonid);

          button.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View v) {

             button.setBackgroundResource(getresources().getDrawable(R.drawable.btn1));
             handler=new Handler();
             handler.postDelayed(new Runnable() {
                   @Override
                   public void run() {
                     button.setBackgroundResource(getresources().getDrawable(R.drawable.btn2));
            }
        }, 3000);


        }
    });
}

它应该是有问题的,但并不是没有错误。请编辑相关代码并将其发布。谢谢。 - JRE.exe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接