0

我正在尝试在按钮按下时更改布局的背景颜色,但在发布时更改回原始可绘制对象。

以下代码更改了背景资源 onclick 按钮,该按钮更改了背景,但在释放时它与新的可绘制资源保持一致:

btnOne = (Button) findViewById(R.id.btnIcon1);
btnOne.setOnClickListener(oneClick);
btnOne.setOnTouchListener(oneC);

    View.OnClickListener oneClick = new View.OnClickListener() {
        @SuppressLint("NewApi")
        public void onClick(View v) {
            editor.putString("AndroidInfo", "1");
            editor.commit();
            Intent myIntent = new Intent(getApplicationContext(), VersionDetail.class);
            startActivityForResult(myIntent, 0);
            overridePendingTransition(R.anim.right_slide_in, R.anim.right_slide_out);
        }
    };

    View.OnTouchListener oneC = new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                rlOne.setBackgroundResource(R.drawable.dateborderclick);
                return true; // if you want to handle the touch event
            case MotionEvent.ACTION_UP:
                rlOne.setBackgroundResource(R.drawable.dateborder);
                return true; // if you want to handle the touch event
        }
            return false;
        }
    };

日期边框xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <corners
        android:radius="4dp"
        android:topRightRadius="4dp"
        android:bottomRightRadius="4dp"
        android:bottomLeftRadius="4dp" />
    <stroke
        android:width="1dp"
        android:color="#FFFFFF" />
    <solid android:color="#CCE5E5E5" />
</shape>

dateborderclick xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <corners
        android:radius="4dp"
        android:topRightRadius="4dp"
        android:bottomRightRadius="4dp"
        android:bottomLeftRadius="4dp" />
    <stroke
        android:width="1dp"
        android:color="#FFFFFF" />
    <solid android:color="#CCD1FFFE" />
</shape>

dateborder 是默认背景。当用户与按钮交互时,我希望 dateborder 在按下时为 dateborderclick 并在发布时返回 dateborder 。根据上面的代码,它应该可以工作,但现在按下可以工作,但点击不行。

4

1 回答 1

1

你让自己变得比需要的更难。Android 有一个State List Drawable可以为你解决这个问题。这是一个样子:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize="true"
    android:dither="true"
    android:variablePadding="false">
    <item
        android:state_selected="true"
        android:state_enabled="true"
        android:drawable="@drawable/tab_on" />
    <item android:drawable="@android:color/transparent" />
</selector>

基本上,您定义处于各种状态的项目并给它们一个可绘制对象。如果您的默认状态是最后一个。如果您点击上面的链接,您将看到所有不同的标志,您可以设置它以将其调整为您想要的。定义此可绘制对象后,只需将其设置为按钮的背景。

于 2013-10-30T19:13:28.417 回答