Как смоделировать нажатие кнопки в Android с Java? - PullRequest
0 голосов
/ 09 января 2020

В моем приложении Android я позволю пользователю увидеть демонстрацию, которая будет автоматически щелкать [имитировать щелчки мыши] на некоторых кнопках. Я выполнил функцию автоклика из моего предыдущего вопроса [ Как смоделировать задержка? ], но мне интересно, есть ли способ показать на экране изменение цвета кнопки [когда я имитирую щелчок], чтобы пользователь мог видеть, что она должна быть нажата, в противном случае без изменения цвета, как они узнают, какая кнопка нажата, поэтому мой вопрос заключается в том, как позволить кнопке изменить цвет фона на синий [или любой другой цвет, который мне нравится], а затем на 0,3 секунды изменить его на исходный цвет? Я ищу метод, поэтому я могу назвать так:

Button myButton = new Button(...);
int duration = 300;  // 300 ms
changeColor(myButton, Color.blue, duration);

В Android Как добиться этого эффекта?

1 Ответ

1 голос
/ 09 января 2020

Ну, вы можете использовать состояния кнопки для изменения цвета, как вы хотите. Для этого подхода вам потребуется создать нарисованный файл xml. Примерно так (пример из одного моего проекта):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" >
        <shape android:shape="rectangle"  >
            <solid android:color="@color/transparent_button_ripple_color"/>
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle"  >
            <solid android:color="@color/transparent_button_ripple_color"/>
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape android:shape="rectangle"  >
            <solid android:color="@color/transparent_button_ripple_color"/>
        </shape>
    </item>
    <item >
        <shape android:shape="rectangle"  >
            <gradient android:angle="-90" android:startColor="@color/colorTransparent" android:endColor="@color/colorTransparent" />
        </shape>
    </item>
</selector>

И они контролируют цвет, устанавливая состояние для кнопки. Также для отображения щелчка в android вы можете добавить эффект ряби (Только для уведомления). https://guides.codepath.com/android/ripple-animation

Отредактировано

Я посмотрел на ваш предыдущий вопрос и нашел решение с учетом вашего кода:

Создайте этот метод:

private void updateViewColorWithDelay(View targetView) {
    targetView.setBackgroundColor(Color.parseColor("#000000"));
    targetView.postDelayed(new Runnable() {
        @Override
        public void run() {
            ivAvatar.setBackgroundColor(Color.parseColor("#ffffff"));
        }
    },300);
}

И используйте его со своими представлениями:

private class AutoDemoListener implements View.OnClickListener {
    public void onClick(View v) {
        Is_AutoDemo_B=true;
        Out("AutoDemoListener");
        switchView(demoView, registrationView);
        startRegistration();
        final Handler handler = new Handler();

        registrationView.symbolButton[2][8].performClick();
        updateViewColorWithDelay(registrationView.symbolButton[[2][8]);

        handler.postDelayed(new Runnable() {
            public void run() {
                registrationView.symbolButton[4][13].performClick();
                updateViewColorWithDelay(registrationView.symbolButton[4][13]);
            }
        }, 1000);

        handler.postDelayed(new Runnable() {
            public void run() {
                registrationView.symbolButton[0][1].performClick();
                updateViewColorWithDelay(registrationView.symbolButton[0][1]);
            }
        }, 3000);

        handler.postDelayed(new Runnable() {
            public void run() {
                registrationView.symbolButton[6][18].performClick();
                updateViewColorWithDelay(registrationView.symbolButton[6][18]);
            }
        }, 5000);

        handler.postDelayed(new Runnable() {
            public void run() {
                Is_AutoDemo_B=false;
            }
        }, 5100);

    }
}
...