如何为展开/折叠视图的图标设置动画?

Mul*_*ard 10 animation android

我有这个图标:

在此输入图像描述

当我在列表视图中按下我的项目时,我希望它旋转180°.当我再次点击时,我希望它再旋转180°,这样就可以达到它的原始位置.

首先我试过:

view.animate().rotation(180).setDuration(500).start();
Run Code Online (Sandbox Code Playgroud)

但它只发射一次.之后我尝试了:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:fillEnabled="true">

    <rotate
        android:duration="500"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="180" />
</set>
Run Code Online (Sandbox Code Playgroud)

但是,即使箭头已经显示在顶部,动画始终以箭头显示到按钮并旋转到顶部开始.

那我怎么能让它工作呢?

cha*_*l03 21

用户按照代码单击图像事件:

ObjectAnimator anim = ObjectAnimator.ofFloat(v, "rotation",rotationAngle, rotationAngle + 180);
            anim.setDuration(500);
            anim.start();
            rotationAngle += 180;
            rotationAngle = rotationAngle%360;
Run Code Online (Sandbox Code Playgroud)

并使rotationAngle成为一个全局变量:

int rotationAngle = 0;
Run Code Online (Sandbox Code Playgroud)


Tal*_*mar 16

对于另一种解决方案,如果您希望每次按下视图时旋转180°,请尝试相反,

rotationAngle = rotationAngle == 0 ? 180 : 0;  //toggle
mExpandArrow.animate().rotation(rotationAngle).setDuration(500).start();
Run Code Online (Sandbox Code Playgroud)

只需将rotationAngle定义为,

int rotationAngle = 0;
Run Code Online (Sandbox Code Playgroud)