Android - 旋转按钮内的图像

kum*_*mar 4 android button android-animation

我想在点击按钮时旋转按钮内的图像.我尝试使用ImageView并且它可以工作但是为了可访问性目的,我需要使用Button而不是ImageView.

点击之前: 在此输入图像描述

这里的向下箭头是按钮背景.

点击后: 在此输入图像描述

单击按钮显示额外数据,并旋转背景箭头.如何在点击时设置动画并旋转按钮背景?

布局代码供参考:

<RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical" >

            <LinearLayout
                android:id="@+id/cases_actions_row"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:orientation="horizontal" >

                <Button
                    android:id="@+id/case_action_item_1"
                    style="@style/card_action_button"
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content" />

                <Button
                    android:id="@+id/case_action_item_2"
                    style="@style/card_action_button"
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content" />

            </LinearLayout>

            <Button
                    android:id="@+id/cases_expand_button"
                    style="@style/card_action_button"
                    android:layout_height="20dp"
                    android:layout_width="20dp"
                    android:layout_alignParentEnd="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/ic_arrow" />

        </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

PPa*_*san 18

最简单的方法是旋转整个按钮(正如Frank N. Stein在评论中建议的那样,ImageButton可能是最合适的,尽管没有什么可以阻止你使用不同的小部件).

有几种方法可以旋转按钮,但是a ViewPropertyAnimator也可能是最简单的方法:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        float deg = button.getRotation() + 180F;
        button.animate().rotation(deg).setInterpolator(new AccelerateDecelerateInterpolator());
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:顺便说一句,如果您希望箭头反转其原始动画,您可以尝试:

float deg = (button.getRotation() == 180F) ? 0F : 180F;
Run Code Online (Sandbox Code Playgroud)

代替 float deg = button.getRotation() + 180F;