Анимация анимации не работает для 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);
}
}
} );
}
}
5 ответов
Дайте анимации длительность. Я считаю, что по умолчанию это 0 (в отличие от анимации свойств, которые по умолчанию ~300 мсек).
Кроме того, вы можете использовать NineOldAndroids для бэкпорта гораздо более совершенного подхода ViewPropertyAnimator к предварительной соте.
Решение:
spin.xml остается таким же, как ваш xml.
Запустите этот код в вашей кнопке OnClickListener
,
ImageView iv = (ImageView) findViewById(R.id.imageView1);
Animation an = AnimationUtils.loadAnimation(Assignment5Activity.this, R.anim.spin);
iv.startAnimation(an);
Попробуй это
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);
}
}
} );
Вы пытались изменить Android:toDegrees от 360 до 359? Для андроида степень 0 такая же, как и для 360, потому что числовые последовательности начинаются с 0, а не с 1. Таким образом, по сути, с текущей настройкой на 360, указание перейти от степени 0 к степени 360 похоже на указание оставаться на месте.
<rotate
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="359" />
Используйте 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);