Анимация Tween не работает для Android

Я пытаюсь сделать что-то очень простое. Я просто пытаюсь запустить простую анимацию движения из файла ресурсов xml для приложения Android при нажатии кнопки. Анимация не запускается при запуске приложения. Я схожу с ума, пытаясь понять, почему.

Вот файл res/anim/spin.xml:

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

    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="infinite"
        android:toDegrees="360" />

</set>

Вот мой класс активности:

    package jorge.jorge.jorge;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.Button;
    import android.widget.ImageView;

    public class Assignment5Activity extends Activity {
        /** Called when the activity is first created. */

        @Override

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);



            final Button btnSpin = (Button) findViewById(R.id.button1);
            btnSpin.setText("Start");
            btnSpin.setOnClickListener(new OnClickListener() {
                public void onClick(View v) 
                {


                    ImageView iv = (ImageView) findViewById(R.id.imageView1);
                    Animation an =    AnimationUtils.loadAnimation(Assignment5Activity.this, R.anim.spin);

                    iv.startAnimation(an);

                    if (an.hasStarted())
                    {
                        btnSpin.setText("Stop");
                    }
                    else
                    {
                        iv.startAnimation(an);
                    }
                }
            } ); 

        }

    }

person rocklandcitizen    schedule 27.06.2012    source источник
comment
Есть что-нибудь еще мы должны знать? Это полный код для этого класса?   -  person Shobhit    schedule 27.06.2012
comment
Ага. Все, что я использую, это этот класс активности, файл ресурсов spin xml и мой основной файл макета.   -  person rocklandcitizen    schedule 27.06.2012


Ответы (5)


Попробуй это

final ImageView iv = (ImageView) findViewById(R.id.imageView1);
                    Animation an =        AnimationUtils.loadAnimation(Assignment5Activity.this, R.anim.spin);

 btnSpin.setOnClickListener(new OnClickListener() {
                public void onClick(View v) 
                {




                    iv.startAnimation(an);

                    if (an.hasStarted())
                    {
                        btnSpin.setText("Stop");
                    }
                    else
                    {
                        iv.startAnimation(an);
                    }
                }
            } ); 
person Chaitanya GOPIREDDY    schedule 27.06.2012

Используйте RotateAnimation, установив точку поворота в центр изображения.

RotateAnimation anim = new RotateAnimation(0f, 350f, 15f, 15f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(700);

// Start animating the image
final ImageView iv = (ImageView) findViewById(R.id.imageView1);
iv.startAnimation(anim);

// Later.. stop the animation
iv.setAnimation(null);
person K_Anas    schedule 27.06.2012
comment
Это тоже не сработало. Я не уверен, почему. Вы предполагаете определить ресурс анимации в XML-файле манифеста? - person rocklandcitizen; 27.06.2012
comment
@rocklandcitizen с этим кодом вам не нужно объявлять анимацию в xml!! если вы хотите работать с анимацией в xml, поместите ее в папку res/anim - person K_Anas; 28.06.2012
comment
Исходный код в моем первом посте использовал ресурс анимации xml, и он находился в каталоге res/anim. Я попробовал приведенный выше код, не запрашивая ресурс xml (просто делая это программно, как представлено). По какой-то причине, которая вне меня, это тоже не сработало. Я думаю, может быть, мне нужно программно загрузить ресурс растрового изображения, а не загружать его в мой файл макета main.xml. Хотя по идее это не должно иметь значения. Я не знаю. - person rocklandcitizen; 28.06.2012

Решение:

spin.xml остается таким же, как ваш XML.
Запустите этот код в OnClickListener вашей кнопки.

ImageView iv = (ImageView) findViewById(R.id.imageView1);
Animation an = AnimationUtils.loadAnimation(Assignment5Activity.this, R.anim.spin);
iv.startAnimation(an);
person Sanket    schedule 27.06.2012

Дайте анимации продолжительность. Я считаю, что по умолчанию это 0 (в отличие от анимации свойств, которая по умолчанию составляет ~ 300 мс).

Кроме того, вы можете использовать NineOldAndroids для резервного копирования гораздо более совершенного подхода ViewPropertyAnimator к предшествующей версии Honeycomb.

person Delyan    schedule 25.06.2013

Вы пытались изменить android:toDegrees с 360 на 359? Для Android степень 0 совпадает с 360, потому что числовые последовательности начинаются с 0, а не с 1. Таким образом, по существу, с текущей настройкой на 360, сказать ему перейти от степени 0 к степени 360, это все равно, что сказать ему оставаться на месте.

    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="infinite"
        android:toDegrees="359" />
person Stephen    schedule 12.04.2014