Изменение фона кнопки в зависимости от текущего фона - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь изменить фон кнопки при ее нажатии, но также могу изменить ее обратно при повторном нажатии.То, что я пытаюсь сделать, это получить текущий фон кнопок, и если он (xxxxx), то измените его на (ггггг).Я не могу найти, как получить текущий фон кнопки и сравнить его с одним из моих доступных для рисования ресурсов.
Любая помощь будет высоко ценится.

Какой-то псевдокод того, что я пытаюсьделать:

if (button1.getBackground() == R.drawable.someDrawable) {
   button1.setBackgroundResource(R.drawable.someOtherDrawable);
}

Ответы [ 4 ]

3 голосов
/ 16 марта 2011

Я думаю, что это правильный путь: ссылка

1 голос
/ 16 марта 2011

У меня простое решение будет иметь два drawables для фона. Один для non_pressed_selector и selected_selector и просто отслеживать, нажата кнопка или нет.

private boolean isPressed = false;
public void onClick() {
    if (isPressed) {
        // set not_pressed_selector
    } else {
        // set pressed_selector
    }
    isPressed != isPressed;
}
0 голосов
/ 29 июня 2013

То, что я сделал, было:

Объявить кнопку в исходном состоянии:

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

Затем я управляю событиями из кода, управляющего фактическим состоянием кнопки, с помощью тега:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.drawables_buttons);  //This is the layout where it's the button

    threeStateButton = (Button)findViewById(R.id.three_States_Button);  //This is the button
    threeStateButton.setOnTouchListener(new CustomTouchListener());    
    threeStateButton.setTag("StateA");    //Set the control tag
}

private class CustomTouchListener implements View.OnTouchListener
{

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent)
    {
        switch (motionEvent.getAction())
        {
            case MotionEvent.ACTION_UP:  //When you lift your finger
                if (threeStateButton.getTag().equals("StateA"))
                {
                    threeStateButton.setBackgroundResource(R.drawable.StateB);
                    Toast.makeText(view.getContext(), "This gonna change my state from StateA to StateB",Toast.LENGTH_SHORT).show();
                    threeStateButton.setTag("StateB");
                }
                else  //If when you lift your finger it was already on stateB
                {
                    threeStateButton.setBackgroundResource(R.drawable.red_button);
                    Toast.makeText(view.getContext(), "This gonna change my state from StateB to StateA",Toast.LENGTH_SHORT).show();
                    threeStateButton.setTag("StateA");
                }
                break;
            //In case you want that you button shows a different state when your finger is pressing it.
            case MotionEvent.ACTION_DOWN:
                threeStateButton.setBackgroundResource(R.drawable.StateButtonPressed);
                break;
        }

        return false;
    }
}

Я не знаю, является ли это лучшим способом сделать это, но это работает, и да, я хотел бы знать, какой способ является оптимальным.

0 голосов
/ 16 марта 2011

Кажется, вам нужно ToggleButton вместо простого Button. Вы можете использовать метод isChecked(), чтобы определить состояние вашей кнопки в OnClickListener и установить там свой фон. Или вы можете определить селектор в xml, как сказал pedr0.

...