Java Android ImageView-图片旋转只在第一次有效

Java Android ImageView-Image rotation only works for the first time

我在 java 中编写了一个代码用于图像视图,它将旋转和淡出并且另一个图像将可见,我使用 imageViewer.animate.rotation(3600).alpha(0); 现在这在我 [=18= 时工作正常] 模拟器上的代码,图像淡入淡出并重新出现就好了,但问题是我第一次编译应用程序后的旋转当我点击图像时,它会旋转并淡出和下一张图片显示,但是当我再次点击图像时,它不会旋转,而只有淡入和淡出会起作用但旋转不起作用(请注意,它在编译后第一次旋转但随后不旋转和淡出in/out 仅适用)。这是代码:

public class MainActivity extends AppCompatActivity
{
    boolean eggview = true;

    public void fade(View view)
    {
        ImageView eggImageView = (ImageView) findViewById(R.id.egg);
        ImageView chickImageView = (ImageView) findViewById(R.id.chick);
        if (eggview)
        {
            eggview = false;
            eggImageView.animate().rotation(3600).setDuration(1200).alpha(0);
            chickImageView.animate().alpha(1);
        }
        else
        {
            eggview = true;
            chickImageView.animate().rotation(3600).alpha(0).setDuration(1200);
            eggImageView.animate().alpha(1);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

将 alpha 设置为 1 时,您必须将 rotation 设置为 0。当您将 rotation 设置为 3600 时,它不是从当前状态而是从默认状态 3600 度,这就是它只工作一次的原因。

boolean eggview = true;
public void fade(View view)
{
    ImageView eggImageView = (ImageView) findViewById(R.id.egg);
    ImageView chickImageView = (ImageView) findViewById(R.id.chick);
    if (eggview)
    {
        eggview = false;
        eggImageView.animate().rotation(3600).setDuration(1200).alpha(0);
        chickImageView.animate().alpha(1).rotation(0);
    }
    else
    {
        eggview = true;
        chickImageView.animate().rotation(3600).alpha(0).setDuration(1200);
        eggImageView.animate().alpha(1).rotation(0);
    }
}

如果您不想在淡入时向后旋转,只需将旋转设置为 actual state + 3600。但是您的代码的主要问题是将旋转设置为实际状态。

使用

ViewPropertyAnimator

方法 rotationBy() 而不是 rotation()

eggImageView.animate().rotationBy(3600)...

rotation() 将视图移动到 360f,rotationBy() 将视图移动到 360f

与 alphaBy() 相同