Android:ImageView 旋转动画只工作一次

Say*_*dal 3 android

我遇到了一个奇怪的问题 如果我第一次单击图像,它会旋转,如果再次单击它,它不会旋转。我已经使用 toast 来检查控制是否在函数内部,但是 toast 一直在打印。

为什么图像没有第二次旋转?这是我的代码..

主要活动:

package com.example.sayantan.myapp1;

import android.annotation.TargetApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

ImageView imageView;

public void rotateImage(View view) {
    Toast.makeText(getApplicationContext(), "in rotateImage()...", Toast.LENGTH_SHORT).show();
    imageView.animate().rotation(1800f).setDuration(1500);
//        Toast.makeText(getApplicationContext(), "End of rotateImage()", Toast.LENGTH_SHORT).show();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView = (ImageView) findViewById(R.id.imageView);

}

}
Run Code Online (Sandbox Code Playgroud)

布局 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.sayantan.myapp1.MainActivity">

<ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/imageView"
    android:layout_below="@+id/blue"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="56dp"
    android:src="@drawable/bart"
    android:onClick="rotateImage" />
Run Code Online (Sandbox Code Playgroud)

Bmu*_*uig 5

我非常确定旋转会保留在动画结束时。因此,当您第二次尝试为图像设置动画时,它不会移动,因为它已经旋转到 1800 度。

因此,要么将图像重置为 0,要么将其旋转为currentRotation + 1800f.


小智 5

使用rotationBy()代替rotation();