Кнопка Android setPressed не меняет анимацию - PullRequest
2 голосов
/ 11 октября 2011

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

<?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/btn_pressed" /> <!-- pressed -->
        <item android:state_focused="true" android:drawable="@drawable/btn_focused" /> <!-- focused -->
        <item android:drawable="@drawable/btn_default" /> <!-- default -->

    </selector>

Я реализовал оба, onClickListener и OnLongClickListener следующее:

private OnLongClickListener mFireHoldListener = new OnLongClickListener() {

    @Override
    public boolean onLongClick(View view) {
        Log.i(TAG, "Long FIRE");

        Button btn = (Button) view;
        btn.setPressed(true);
        btn.invalidate();
        Log.i(TAG, "isPressed: " + btn.isPressed());

        return false;
    }

};

Если я выполню длинный щелчок, кнопка не изменит свой фон на state_pressed. Как я могу держать кнопку нажатой? Использование переключателя не работает, так как обычная операция щелчка должна быть возможной. Если кнопка нажата в течение более длительного времени, она блокируется.

Большое спасибо

1 Ответ

4 голосов
/ 12 октября 2011

Итак, наконец-то это работает. По сравнению с этим верным способом сделать состояние кнопки намеренно истинным

  @Override
    public boolean onLongClick(View view) {
        final Button btn = (Button) view;
        btn.post(new Runnable(
            public void run() {
                btn.setBackgroungResource(R.drawable.btn_pressed);
            }
        }

        return false;
    }
...