6

我有button_focusedbutton_pressedbutton_normal图像。当我按下按钮时,将button_pressed显示图像并开始与按下按钮相关的操作。

当我停止按下按钮时,动作继续,但按钮返回到button_normal正在显示的图像。

如何设置button_pressed在整个操作期间显示的按钮图像然后重置为button_normal图像?

感谢您的时间

4

7 回答 7

4

我使用了类似的功能

void setHighlighted(boolean highlight) {
    button.setBackgroundResource( highlight
                                ? R.drawable.bbg_pressed
                                : R.drawable.button_background);
}

其中 button_background 是定义在以下位置的选择器 button_backgroung.xml

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

也就是说,这段代码不会干扰Android框架使用的pressed状态;相反,它会更改背景,使按钮看起来被按下。

于 2013-10-07T12:31:20.747 回答
2

如果您只需要一个两种状态的按钮,为了让它更清楚一点:

你不需要你自己的button.xml. 您可以使用正常的Android。

如果您单击按钮,则该button.setPressed(true)按钮将不起作用,因为一旦您松开按钮,Android 将重置它。尝试先设置另一个按钮setPressed状态,看看效果。

这意味着,要在同一个按钮上使用它,必须将其设置为延迟。这是一个工作示例。当然,上面提到的改变背景的方法(通过 long id 18..)也有效。

   private final Handler mHandler = new Handler();
   rootView.findViewById(R.id.yourButton).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean pressed = false;
            if (v.getTag() instanceof Boolean)
                pressed = (boolean) v.getTag();
            final boolean newPressed = !pressed;
            // setTag to store state
            v.setTag(newPressed);
            final View vRun = v;
            Runnable run = new Runnable() {
                @Override
                public void run() {
                    vRun.setPressed(newPressed);
                }
            };
            mHandler.post(run);
            // mHandler.postDelayed(run, 5);
        }
    });
于 2015-03-01T00:47:39.830 回答
1

我用了

NAME_OF_BUTTON.setImageResource(0xvalueofbutton_pressed image listed in R.java);

然后当动作终止时,我复制了代码并插入了button_normal.

我以前做过不同的事情,我找不到我的备份或我的代码的硬拷贝。

再次感谢您的回复。

于 2011-01-12T23:29:09.627 回答
1

如果您在其 onClick 方法中手动更改按钮中的图像,则当操作完成时,它可以为该按钮设置正常图像。如果动作非常快,则更改将无法正确显示 - 它可能还需要延迟代码。

于 2011-01-12T23:17:39.313 回答
1

利用(buttonName).setPressed(true)

并确保您为可绘制对象保留了适当的 xml 文件,该文件定义了用于按下、聚焦等状态的可绘制对象:

于 2011-04-11T09:37:45.843 回答
1

只需添加我的 2 美分作为另一种选择。您可以使用 setSelected(true),而不是 button.setPressed,一旦用户松开按钮,它就会从选择器中丢失状态。只需确保在完成操作后返回 setSelected(false) 即可。

        btn.setOnClickListener( view ->  {
        view.setSelected(true);
    });

并将可绘制选择器添加为按钮的背景:

<item android:drawable="@drawable/btn_selected" android:state_selected="true"></item>
于 2018-03-05T21:33:34.253 回答
1

老问题,但我所做的似乎比上述所有内容都简单。在按钮的点击中:

thisButton
    .getBackground()
    .setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);

我的按钮正在使用可绘制资源(不确定这是否重要),当用户单击一个时,我设置了我想要的颜色过滤器,它与我用于“按下”状态的颜色相同,因此看起来它保持按下状态。

要清除它,请使用:

thisButton.getBackground().clearColorFilter();
于 2020-06-24T22:29:15.637 回答