【问题标题】:Checkbox not working in android with animation复选框在带有动画的android中不起作用
【发布时间】:2019-02-01 16:17:03
【问题描述】:

我刚刚在这篇文章 https://android.jlelse.eu/using-statelistanimators-to-create-instagram-like-animation-db2676c9391 之后创建了这个带有动​​画的复选框,当我从我的 java 代码中调用 checkbox.setChecked(true) 时它不起作用! 当我点击喜欢按钮时,我想要那个!如果不喜欢按钮被检查为真,那么它必须检查为假。当我点击不喜欢按钮时,如果喜欢被选中,那么它必须被选中! 这是复选框 XML 代码:

<CheckBox
                android:layout_toLeftOf="@+id/save_btn"
                android:id="@+id/dislike_btn"
                android:layout_marginHorizontal="12dp"
                android:background="@drawable/dislike_icon"
                android:alpha="0.8"
                android:layout_width="24dp"
                android:layout_height="24dp"
                android:clickable="true"
                android:button="@null"
                android:stateListAnimator="@animator/like_animation"

                android:focusable="true"
                />
            <CheckBox
                android:layout_toLeftOf="@+id/dislike_btn"
                android:id="@+id/like_btn"
                android:layout_marginHorizontal="12dp"
                android:background="@drawable/like_icon"
                android:alpha="0.8"
                android:layout_width="24dp"
                android:layout_height="24dp"
                android:clickable="true"
                android:button="@null"
                android:stateListAnimator="@animator/like_animation"
                android:focusable="true"
                />

这里是like_icon 和dislike_icon 代码:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true"
        android:drawable="@drawable/dislike_icon_red"/>
    <item android:state_checked="false"
        android:drawable="@drawable/dislike_icon_black"/>

</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true"
        android:drawable="@drawable/thumps_up_red"/>
    <item android:state_checked="false"
        android:drawable="@drawable/thumps_up_black"/>

</selector>

和动画代码:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <set xmlns:android="http://schemas.android.com/apk/res/android">
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="1.525"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:valueTo="1.525"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="4dp"
                android:valueType="floatType" />

            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="1.0"
                android:startOffset="@android:integer/config_shortAnimTime"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:startOffset="@android:integer/config_shortAnimTime"
                android:valueTo="1.0"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:startOffset="@android:integer/config_shortAnimTime"
                android:valueTo="0dp"
                android:valueType="floatType" />

        </set>

    </item>

    <item>
        <set>
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="1.525"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:valueTo="1.525"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:valueTo="4dp"
                android:valueType="floatType" />

            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleX"
                android:valueTo="1.0"
                android:startOffset="@android:integer/config_shortAnimTime"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="scaleY"
                android:startOffset="@android:integer/config_shortAnimTime"
                android:valueTo="1.0"
                android:valueType="floatType" />
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:propertyName="translationZ"
                android:startOffset="@android:integer/config_shortAnimTime"
                android:valueTo="0dp"
                android:valueType="floatType" />
        </set>
    </item>
</selector>

这就是我从我的 java 代码中调用的内容!

like.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        if (like.isChecked()){
            Log.i("ELA","like check called");
            dislike.setChecked(false);
        }
    }
});
dislike.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        if (dislike.isChecked()){
            like.setChecked(false);
        }
    }
});

我也试过 .setOnClickListener!

【问题讨论】:

    标签: java android xml animation


    【解决方案1】:

    在动画器中设置选中和未选中状态。以下示例已检查状态。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true">
            <set>
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="scaleX"
                    android:valueTo="1.525"
                    android:valueType="floatType" />
    
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="scaleY"
                    android:valueTo="1.525"
                    android:valueType="floatType" />
    
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="translationZ"
                    android:valueTo="4dp"
                    android:valueType="floatType" />
    
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="scaleX"
                    android:startOffset="@android:integer/config_shortAnimTime"
                    android:valueTo="1.0"
                    android:valueType="floatType" />
    
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="scaleY"
                    android:startOffset="@android:integer/config_shortAnimTime"
                    android:valueTo="1.0"
                    android:valueType="floatType" />
    
                <objectAnimator
                    android:duration="@android:integer/config_shortAnimTime"
                    android:propertyName="translationZ"
                    android:startOffset="@android:integer/config_shortAnimTime"
                    android:valueTo="0dp"
                    android:valueType="floatType" />
            </set>
        </item>
    </selector>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多