Пример простой анимации анимации
Я пытаюсь реализовать анимацию анимации "гиперпространства", описанную в http://developer.android.com/guide/topics/resources/animation-resource.html ( "Ресурсы анимации" ) - однако она не работает так, как написано, Когда я запускаю приложение, я просто получаю пустой вид под панелью заголовков приложений. Что я делаю не так?
В примере, вот мой код. Я создал res/anim/hyperspace_jump.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700" />
<set
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="700">
<scale
android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
<rotate
android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="400" />
</set>
</set>
Я также создал layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>
</LinearLayout>
Наконец, у меня есть активность:
package com.tomoreilly.geology;
import android.app.Activity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView image = (ImageView) findViewById(R.id.ImageView01);
Animation hyperspaceJump =
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
}
}
Но я не вижу анимации при запуске приложения. Не хватает ли некоторых деталей, которые не описаны в примере "Ресурсы анимации"?
Спасибо,
Том
Ответы
Ответ 1
![enter image description here]()
Чтобы добавить другой ответ, вы также можете попробовать Universal Tween Engine для анимации пользовательских интерфейсов Android. Действительно, ваша анимация, которая требует довольно много строк в формате XML, будет описана следующим образом:
Timeline.createSequence()
// First, set your pivot (Tween.set() works instantly)
.push(Tween.set(image, ViewAccessor.PIVOT_XY).target(0.5f, 0.5f))
// Then, animate your scale and rotation as you want
.push(Tween.to(image, ViewAccessor.SCALE_XY, 0.7f).target(1.4f, 0.6f))
.beginParallel()
.push(Tween.to(image, ViewAccessor.SCALE_XY, 0.4f).target(0, 0))
.push(Tween.to(image, ViewAccessor.ROTATION, 0.4f).target(-45))
.end()
// Finally, start the animation!
.start();
Это может быть более читаемым, если у вас есть большой набор действий для последовательности. Двигатель сильно оптимизирован для Android, и особенно для игр, и не выделяет ничего, чтобы обеспечить лучшую производительность.
Он полностью с открытым исходным кодом, сильно документирован и выпущен с лицензией Apache-2.
Вы можете дать Android-демо попробовать, если хотите:
Ответ 2
Ваше изображение должно иметь источник, определенный как в xml, так и в вашей активности.
XML:
<ImageView android:id="@+id/ImageView01"
android:src="@drawable/someimage"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
активность:
ImageView image = (ImageView) findViewById(R.id.ImageView01);
image.setImageResource(R.drawable.some_image);
Ответ 3
Я предполагаю, что ViewFlipper требуется. Потому что, когда вы хотите анимацию между анимацией, вам нужен ViewFlipper для анимации.
делать следующие вещи. Я думаю, решить проблему.
Создайте новый XML файл и добавьте в него вкладку ViewFlipper...
use include tab, чтобы включить все остальные макеты, когда вы хотите сделать анимацию.
и используйте следующий код
flipper = (ViewFlipper) findViewById(R.id.flipper);
Button button1 = (Button) findViewById(R.id.Button01); // Button in one activity
Button button2 = (Button) findViewById(R.id.Button02); // Button in second activity
// Other Methods
private Animation inFromRightAnimation() {
// Animation inFromRight = new TranslateAnimation(
/*
* Animation inFromRight = new ScaleAnimation(
* Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT,
* 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f,
* Animation.RELATIVE_TO_PARENT, 0.0f);
*/
Animation inFromRight = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
inFromRight.setDuration(500);
inFromRight.setInterpolator(new AccelerateInterpolator());
return inFromRight;
}
private Animation outToLeftAnimation() {
// Animation outtoLeft = new TranslateAnimation(
/*
* Animation outtoLeft = new
* ScaleAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
* Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT,
* 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f);
*/
Animation outtoLeft = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
outtoLeft.setDuration(500);
outtoLeft.setInterpolator(new AccelerateInterpolator());
return outtoLeft;
}
private Animation inFromLeftAnimation() {
// Animation inFromLeft = new TranslateAnimation(
/*
* Animation inFromLeft = new
* ScaleAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
* Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT,
* 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f);
*/
Animation inFromLeft = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
inFromLeft.setDuration(500);
inFromLeft.setInterpolator(new AccelerateInterpolator());
return inFromLeft;
}
private Animation outToRightAnimation() {
// Animation outtoRight = new TranslateAnimation(
/*
* Animation outtoRight = new
* ScaleAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
* Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT,
* 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f);
*/
Animation outtoRight = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
outtoRight.setDuration(500);
outtoRight.setInterpolator(new AccelerateInterpolator());
return outtoRight;
}
Ответ 4
package com.example;
import android.app.Activity;
import android.os.Bundle;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class TeeenAni extends Activity {
ViewFlipper flipper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView image = (ImageView) findViewById(R.id.ImageView01);
Animation hyperspaceJump =
AnimationUtils.loadAnimation(this, R.anim.);
image.startAnimation(hyperspaceJump);
flipper = (ViewFlipper) findViewById(R.anim.hyperspace_jump);
Button button1 = (Button) findViewById(R.id.Button01);
Button button2 = (Button) findViewById(R.id.Button02);
}
private Animation inFromRightAnimation() {
Animation inFromRight = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
inFromRight.setDuration(500);
inFromRight.setInterpolator(new AccelerateInterpolator());
return inFromRight;
}
private Animation outToLeftAnimation() {
Animation outtoLeft = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
outtoLeft.setDuration(500);
outtoLeft.setInterpolator(new AccelerateInterpolator());
return outtoLeft;
}
private Animation inFromLeftAnimation() {
Animation inFromLeft = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
inFromLeft.setDuration(500);
inFromLeft.setInterpolator(new AccelerateInterpolator());
return inFromLeft;
}
private Animation outToRightAnimation() {
Animation outtoRight = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
outtoRight.setDuration(500);
outtoRight.setInterpolator(new AccelerateInterpolator());
return outtoRight;
}
[R.anim.hyperspace_jump] [1] }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<ImageView android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<ViewFlipper android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<Button android:id="@+id/Button01"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Home"></Button>
<Button android:id="@+id/Button02"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Gallary"></Button>