使用 android 中的处理程序设置背景

Setting the background using a handler in android

我想在单击按钮时更改背景,但时间很短。我正在使用处理程序

  button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            Handler handler = new Handler();
            Runnable r = new Runnable() {

                public void run() {
                    relativeLayout = new RelativeLayout(MainActivity.this);
                    relativeLayout.setBackgroundResource(R.drawable.ic_launcher);
                    setContentView(relativeLayout);

                }
            };
            handler.postDelayed(r,2000);
        }
    });

} }

但是,现在改变背景需要两秒,而不是改变两秒。有人有想法吗?

谢谢!

您已使用 handler.postDelayed。因此 运行nable 中的代码将在 2 秒后 运行。要使其按照您的意愿工作,一种方法是将设置背景的代码带入 运行nable 之外。然后在 运行nable 中,您可以再次使用 setContentView 将其设置为前一个。

不要这样做。

改为使用 StateListDrawable。 正是为了这个目的

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/color_pressed"
    android:state_pressed="true" />
    <item android:drawable="@drawable/color_normal" />
</selector>

将其设置为您的按钮的背景。

你可以这样做:

private boolean mState;
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            if (mState) {
                return;
            }
            mstate = true;
            relativeLayout.setBackgroundResource(R.drawable.newcolor); //this color will last for 2sec

            Handler handler = new Handler();
            Runnable r = new Runnable() {

                public void run() {
                 mState=false;
                 relativeLayout.setBackgroundResource(R.drawable.oldcolor);
                }
            };
            handler.postDelayed(r,2000);
        }
    });