Эффект ряби, как флажок - PullRequest
       63

Эффект ряби, как флажок

0 голосов
/ 29 марта 2020

Как использовать тот же эффект ряби, что и на кнопках меню. То есть цвет волн варьируется в зависимости от включения. На данный момент, вот так:

меню

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/elect"
        android:icon="@drawable/ic_elect_off"
        android:checkable="true"
        android:checked="false"
        android:title="@string/menu_elect"
        app:showAsAction="ifRoom" />
</menu>

Java

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_rule, menu);
        MenuItem item = menu.findItem(R.id.elect);
        item.setChecked(rule.isElect());
        item.setIcon(rule.isElect() ? R.drawable.ic_elect_on : R.drawable.ic_elect_off);

    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.elect) {
            item.setChecked(!item.isChecked());
            item.setIcon(item.isChecked() ? R.drawable.ic_elect_on : R.drawable.ic_elect_off);

            rule.setElect(item.isChecked());
            Labs.get(getActivity()).updateRule(rule);
        }
        return super.onOptionsItemSelected(item);
    }

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

меню

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/elect"
        app:actionViewClass="android.widget.CheckBox"
        android:checkable="true"
        android:title="@string/menu_elect"
        app:showAsAction="ifRoom" />
</menu>

Java

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_rule, menu);

        MenuItem item = menu.findItem(R.id.elect);
        final CheckBox checkBox = (CheckBox) item.getActionView();
        checkBox.setButtonDrawable(R.drawable.elect);
        checkBox.setChecked(rule.isElect());

        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                rule.setElect(checkBox.isChecked());
                Labs.get(getActivity()).updateRule(rule);
            }
        });
    }

избираемое рисование

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_checked="false"
        android:drawable="@drawable/ic_elect_off" />
    <item
        android:state_checked="true"
        android:drawable="@drawable/ic_elect_on" />
</selector>

1 Ответ

0 голосов
/ 31 марта 2020

меню / меню. xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/elect"
        android:icon="@drawable/ic_elect_off"
        android:checkable="true"
        android:checked="false"
        android:title="@string/menu_elect"
        app:actionViewClass="android.widget.CheckBox"
        app:showAsAction="ifRoom" />
</menu>

Java

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_rule, menu);
        MenuItem item = menu.findItem(R.id.elect);
        item.setActionView(R.layout.ic_elect);
        item.getActionView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //TODO
                //bonus
                Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.rotation);
                item.getActionView().startAnimation(animation);
            }
        });
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

layout / ic_elect. xml

<?xml version="1.0" encoding="utf-8"?>
<CheckBox
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@null"
    android:translationX="12dp"
    android:button="@drawable/ic_elect" />

drawable / ic_elect . xml

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

бонус анимация / вращение. xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="72"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="200"
    android:interpolator="@android:anim/linear_interpolator" />
...