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

时间:2015-02-15 00:24:28

标签: android handler

我想在您点击按钮时更改背景,但只是在很短的时间内。我使用的是处理程序

  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);
        }
    });

}}

但是,现在需要两秒钟才能更改背景而不是将其更改为两秒钟。有人有想法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

您已使用handler.postDelayed。因此,runnable中的代码将在2秒后运行。为了使它按你想要的方式工作,一种方法是在runnable之外带你设置背景的代码。然后在runnable中你可以再次使用setContentView将它设置为前一个。

答案 1 :(得分:2)

不要这样做。

改为使用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>

将此设置为Button的背景。

答案 2 :(得分:0)

你可以这样做:

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);
        }
    });