Estoy enfrentando un problema extraño. Si hago clic en la imagen, está girando por primera vez, si hace clic en ella nuevamente, no gira. He usado tostadas para verificar si el control va dentro de la función, pero las tostadas se imprimen todo el tiempo.

¿Por qué la imagen no gira por segunda vez? aquí está mi código ...

Actividad principal:

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);

}

}

Diseño 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" />
3
Sayantan Mandal 23 sep. 2016 a las 16:13

4 respuestas

La mejor respuesta

Estoy bastante seguro de que la rotación se mantiene al final de la animación. Entonces, la segunda vez que intentas animar la imagen, no se mueve porque ya está rotada a 1800.

Por lo tanto, restablezca su imagen a 0 o gírela a currentRotation + 1800f.

2
Bmuig 23 sep. 2016 a las 13:24

Hola puedes probar con esto

imageView.animate().rotation(1800f).setDuration(1500);
imageView.getAnimation().setRepeatCount(Animation.INFINITE);

Gracias espero que esto te ayude.

1
Saveen 23 sep. 2016 a las 13:27

¿Ha intentado llamar a Start ()? imageView.animate (). rotación (1800f) .setDuration (1500) .start ();

2
Robin Bruneel 23 sep. 2016 a las 13:33

Utilice rotationBy() en lugar de rotation();

4
Jiachen 20 dic. 2017 a las 19:46